Мапа у библиотеци стандардних шаблона Ц ++ (СТЛ) са примером

Преглед садржаја:

Anonim

Шта је стд :: мап?

У Ц ++-у, МАП је асоцијативни контејнер који чува ставке у мапираном облику. Свака ставка на мапи састоји се од вредности кључ / вредност и мапиране вредности. Две мапиране вредности не могу делити исте вредности кључа.

Кључне вредности су добре за јединствено сортирање и идентификовање елемената. Мапиране вредности служе за чување садржаја повезаног са кључем. Њих две се могу разликовати по типовима, али тип члана их комбинује путем типа пара који комбинује оба.

У овом упутству за Ц ++ научићете:

  • Шта је стд :: мап?
  • Зашто користити стд :: мап?
  • Синтакса:
  • Типови чланова:
  • Уграђене функције
  • Итерирање елемената мапе
  • Уметање података у стд :: мап:
  • Претраживање на мапи
  • Брисање података са мапе

Зашто користити стд :: мап?

Ево разлога за коришћење мапе:

  • стд :: мап чува јединствене кључеве само у сортираном редоследу на основу изабраних критеријума за сортирање.
  • Једноставно је и брже тражење елемената помоћу кључа.
  • Уз сваки тастер је причвршћен само један елемент.
  • стд :: мап се може користити као асоцијативни низ.
  • стд :: мап је могуће имплементирати помоћу бинарних стабала (уравнотежено).

Синтакса:

Да бисте прогласили стд :: мап, користите ову синтаксу:

std::mapmap_name;
  • Тип_дата означава тип података кључева мапе.
  • Вредност_датата означава тип података вредности које одговарају кључевима мапе.
  • Име_карте је назив мапе.

На пример:

map my_map;

Прогласили смо мапу која се зове ми_мап. Мапа ће имати низ као кључне дататипес и цео број као вредности ДатаТипе.

Типови чланова:

Функције члана могу да користе следеће типове чланова као параметре или као повратни тип:

  • кеи_типе: Кључ (први параметар у предлошку)
  • маппед_типе: Т (Други параметар у предлошку)
  • кеи_цомпаре: Упореди (трећи параметар у предлошку)
  • аллоцатор_типе: Аллоц (четврти параметар у предлошку)
  • валуе_типе: пар <цонст кеи_типе, маппед_типе>
  • валуе_цомпаре: Угњежђена класа функције за упоређивање елемената
  • референца: аллоцатор_типе :: референце
  • цонст_референце: аллоцатор_типе :: цонст_референце
  • показивач: аллоцатор_типе :: поинтер
  • цонст_поинтер: аллоцатор_типе :: цонст_поинтер
  • итератор: двосмерни итератор на валуе_типе
  • цонст_итератор: двосмерни итератор за цонст валуе_типе
  • реверсе_итератор: обрнути итератор
  • цонст_реверсе_итератор: константни обрнути итератор
  • тип_разлике : птрдифф_т
  • сизе_типе: сизе_т

Уграђене функције

стд :: мап долази са уграђеним функцијама. Неки од њих укључују:

  • бегин () - Ова функција враћа итератор на прву ставку карте.
  • сизе () - Ова функција враћа број ставки на мапи.
  • емпти () - Ова функција враћа логичку вриједност која означава да ли је карта празна.
  • убаци (пар (кључ, вредност)) - Ова функција убацује нови пар кључ / вредност на мапу.
  • финд (вал) - Ова функција даје итератор елементу вал ако је пронађен. У супротном, вратиће м.енд ().
  • Обриши (позиција итератора) - Ова функција брише ставку на месту на које указује итератор.
  • брисање (цонст г) - Ова функција брише кључ / вредност г са мапе.
  • Цлеар () - Ова функција брише све ставке са мапе.

Итерирање елемената мапе

Можете прелиставати елементе мапе. Једноставно морамо направити итератор и користити га за ово. На пример:

Пример 1:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите иостреам датотеку заглавља у наш код да бисте користили његове функције.
  2. Укључите датотеку заглавља низа у наш код да бисте користили његове функције.
  3. Укључите датотеку заглавља мапе у наш код да бисте користили његове функције.
  4. Укључите стд простор имена у наш код да бисте користили његове класе без позивања.
  5. Позовите главну () функцију. Ознака {означава почетак тела функције.
  6. Направите мапу под називом Студенти где ће кључеви бити цели бројеви, а вредности ће бити низови.
  7. Уметните вредности у мапу Студенти. Кључ од 200 и вредност Алице биће уметнути на мапу.
  8. Уметните вредности у мапу Студенти. Кључ од 201 и вредност Џона биће уметнути на мапу.
  9. Користите функцију сизе () да бисте добили величину мапе која се зове Студенти. Ово би требало да врати 2.
  10. Одштампајте мало текста на конзоли.
  11. Користите фор петљу да бисте креирали итератор са именом да би прелазио преко елемената мапе под називом Студенти.
  12. Одштампајте вредности карте Ученици на конзоли.
  13. Крај тела петље фор.
  14. Крај тела главне () функције.

Уметање података у стд :: мап

Ставке можете унети у стд :: мап помоћу функције инсерт (). Запамтите да кључеви стд :: мап морају бити јединствени.

Дакле, прво проверава да ли је сваки кључ присутан на мапи. Ако је присутан, унос неће бити уметнут, али враћа итератор за постојећи унос. Ако није присутан, унос се убацује.

Функција има следеће варијације:

  • инсерт (паир) - са овом варијацијом, пар кључ / вредност се убацује у мапу.
  • инсерт (старт_итр, енд_итр) - са овом варијацијом, уноси ће бити уметнути унутар опсега дефинисаног старт_итр и енд_итр са друге мапе.

Функција инсерт_ор_ассинг () ради на исти начин као и функција инсерт (), али ако дати кључ већ постоји на мапи, његова вредност ће бити измењена.

Пример 2:

#include #include using namespace std;int main() {map m{ {1,3} , {2,4} , {3,5} };m.insert({ 5, 6 });m.insert({ 1, 8 });m.insert_or_assign(1, 6);cout << "Key\tElement\n";for (auto itr = m.begin(); itr != m.end(); ++itr) {cout << itr->first << '\t' << itr->second << '\n';}return 0;}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите датотеку заглавља мапе у наш код да бисте користили његове функције.
  2. Укључите иостреам датотеку заглавља у наш код да бисте користили његове функције.
  3. Укључите стд простор имена у наш код да бисте користили његове класе без позивања.
  4. Позовите главну () функцију. Ознака {означава почетак тела функције.
  5. Креирајте мапу названу м где ће кључеви бити цели бројеви, а вредности ће бити цели бројеви. На карту су унета три уноса.
  6. Уметните нови унос у мапу м. Кључ 5 и вредност 6 биће уметнути у мапу.
  7. Покушај уноса у већ постојећи кључ. Будући да кључ 1 већ постоји на мапи, унос се неће извршити.
  8. Коришћење функције инсерт_ор_ассигн () за уметање или модификовање постојећег уноса. Будући да кључ 1 већ постоји, његова вредност ће бити промењена у 6.
  9. Одштампајте мало текста на конзоли. Знак "\ т" ствара водоравни размак док знак "\ н" помера курсор миша у следећи ред.
  10. Користите фор петљу за креирање итератора под називом итр који ће прелазити преко елемената мапе по имену м.
  11. Одштампајте вредности карте м на конзоли. Знак "\ т" ствара водоравни размак између сваког кључа и његове одговарајуће вредности. Супротно томе, знак "\ н" помера курсор миша у следећи ред након сваке итерације.
  12. Крај тела петље фор.
  13. Програм мора вратити вредност након успешног завршетка.
  14. Крај тела главне () функције.

Претраживање на мапи

Функцију финд () можемо користити за тражење елемената на мапи према њиховим кључевима. Ако кључ није пронађен, функција враћа стд :: мап :: енд. У супротном, вратит ће се итератор траженог елемента.

Пример 2:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::iterator it = Students.find(201);if (it != Students.end()) {std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';}}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите иостреам датотеку заглавља у наш код да бисте користили његове функције без грешака.
  2. Укључите датотеку заглавља низа у наш код да бисте користили његове функције без грешака.
  3. Укључите датотеку заглавља мапе у наш код да бисте користили њене функције без грешака.
  4. Укључите стд простор имена у наш код да бисте користили његове класе без позивања.
  5. Позовите главну () функцију. Ознака {означава почетак тела маин () функције.
  6. Направите мапу названу Студенти чији ће кључеви бити цели бројеви и низови вредности.
  7. Уметните вредности у мапу Студенти. Кључ од 200 и вредност Алице биће уметнути на мапу.
  8. Уметните вредности у мапу Студенти. Кључ од 201 и вредност Џона биће уметнути на мапу.
  9. Потражите вредност повезану са кључем 201.
  10. Помоћу израза иф проверите да ли је пронађена вредност за кључ.
  11. Одштампајте вредност кључа уз неки текст на конзоли.
  12. Крај тела изјаве иф.
  13. Крај тела главне () функције.

Брисање података са мапе

Функцију ерасе () можемо користити за брисање вредности са мапе. Једноставно креирамо итератор који показује на елемент који треба избрисати. Затим се итератор прослеђује функцији ерасе ().

Пример 3:

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите иостреам датотеку заглавља у наш код да бисте користили његове функције.
  2. Укључите датотеку заглавља низа у наш код да бисте користили његове функције.
  3. Укључите датотеку заглавља мапе у наш код да бисте користили његове функције.
  4. Укључите стд простор имена у наш код да бисте користили његове класе без позивања.
  5. Позовите главну () функцију. Ознака {означава почетак тела главне () функције.
  6. Направите мапу под називом ми_мап чији ће кључеви бити низови и вредности целих бројева.
  7. Уметните вредности у мапу ми_мап. Кључ краве и вредност 1 биће уметнути у мапу.
  8. Уметните вредности у мапу ми_мап. Кључ Цат и вредност 2 биће уметнути у мапу.
  9. Додајте вредност 3 на мапу ми_мап помоћу кључа лава.
  10. Направите итератор за прелазак преко мапе ми_мап у потрази за кључном мачком.
  11. Избришите елемент на који указује итератор.
  12. Користите итератор за прелазак преко елемената мапе ми_мап од почетка до краја.
  13. Одштампајте садржај мапе ми_мап на конзоли.
  14. Програм мора да врати излаз након успешног завршетка.
  15. Крај тела главне () функције.

Резиме:

  • Мапа је асоцијативни контејнер који складишти предмете у мапираном облику.
  • Свака ставка на мапи има кључну вредност и мапирану вредност.
  • На мапи две мапиране вредности не могу делити кључне вредности.
  • Вредности кључа помажу у јединственом сортирању и идентификовању елемената.
  • Мапиране вредности помажу у складиштењу садржаја повезаног са кључем.
  • Мапа Ц ++ чува јединствене кључеве у сортираном редоследу.
  • Да бисмо радили са мапом Ц ++, креирамо итератор за итерацију по елементима.
  • Помоћу итератора можемо обављати задатке попут претраживања и брисања предмета са мапе.