Mapujte v C ++ standardní knihovně šablon (STL) s příkladem

Obsah:

Anonim

Co je std :: map?

V C ++ je MAP asociativní kontejner, který ukládá položky v mapované podobě. Každá položka na mapě se skládá z páru klíč – hodnota a namapované hodnoty. Dvě mapované hodnoty nemohou sdílet stejné klíčové hodnoty.

Klíčové hodnoty jsou dobré pro jedinečné třídění a identifikaci prvků. Mapované hodnoty slouží k ukládání obsahu spojeného s klíčem. Tyto dva typy se mohou lišit, ale typ člena je kombinuje prostřednictvím typu dvojice, který kombinuje oba typy.

V tomto výukovém programu C ++ se naučíte:

  • Co je std :: map?
  • Proč používat std :: map?
  • Syntax:
  • Typy členů:
  • Integrované funkce
  • Iterace nad prvky mapy
  • Vkládání dat do std :: map:
  • Hledání na mapě
  • Odstranění dat z mapy

Proč používat std :: map?

Zde jsou důvody pro použití mapy:

  • std :: map ukládá jedinečné klíče pouze v seřazeném pořadí na základě zvolených kritérií řazení.
  • Hledání prvků pomocí klíče je snadné a rychlejší.
  • Ke každému klíči je připojen pouze jeden prvek.
  • std :: map lze použít jako asociativní pole.
  • std :: map je implementovatelný pomocí binárních stromů (vyvážený).

Syntax:

Chcete-li deklarovat std :: map, použijte tuto syntaxi:

std::mapmap_name;
  • Key_datatype označuje datový typ mapových klíčů.
  • Value_datatype označuje datový typ hodnot odpovídajících mapovým klíčům.
  • Název_mapy je název mapy.

Například:

map my_map;

Deklarovali jsme mapu s názvem my_map. Mapa bude mít řetězec jako klíčové datové typy a celé číslo jako datový typ hodnot .

Typy členů:

Členské funkce mohou používat následující typy členů jako parametry nebo návratový typ:

  • key_type: Key (první parametr v šabloně)
  • mapped_type: T (druhý parametr v šabloně)
  • key_compare: Porovnat (třetí parametr v šabloně)
  • allocator_type: Alloc (čtvrtý parametr v šabloně)
  • value_type: pair
  • value_compare: Vnořená třída funkcí pro porovnání prvků
  • reference: allocator_type :: reference
  • const_reference: allocator_type :: const_reference
  • pointer: allocator_type :: pointer
  • const_pointer: allocator_type :: const_pointer
  • iterátor: obousměrný iterátor na hodnotu_typ
  • const_iterator: obousměrný iterátor na const value_type
  • reverse_iterator: reverzní iterátor
  • const_reverse_iterator: konstantní reverzní iterátor
  • typ_typu : ptrdiff_t
  • size_type: size_t

Integrované funkce

std :: map přichází s vestavěnými funkcemi. Mezi ně patří:

  • begin () - Tato funkce vrátí iterátor na první položku mapy.
  • size () - Tato funkce vrací počet položek v mapě.
  • empty () - Tato funkce vrací booleovskou hodnotu označující, zda je mapa prázdná.
  • insert (pair (key, value)) - Tato funkce vloží nový pár klíč-hodnota na mapu.
  • find (val) - Tato funkce dává iterátoru prvku val, pokud je nalezen. V opačném případě vrátí m.end ().
  • Vymazat (poloha iterátoru) - Tato funkce odstraní položku na pozici, na kterou ukazuje iterátor.
  • erase (const g) - Tato funkce odstraní klíč – hodnota g z mapy.
  • Clear () - Tato funkce odstraní všechny položky z mapy.

Iterace nad prvky mapy

Můžete iterovat přes prvky mapy. Jednoduše musíme vytvořit iterátor a použít ho k tomu. Například:

Příklad 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;}}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
  2. Zahrňte soubor záhlaví řetězce do našeho kódu, abyste mohli používat jeho funkce.
  3. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví mapy.
  4. Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
  5. Zavolejte funkci main (). {Označuje začátek těla funkce.
  6. Vytvořte mapu s názvem Studenti, kde klíče budou celá čísla a hodnoty budou řetězce.
  7. Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 200 a hodnota Alice.
  8. Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 201 a hodnota John.
  9. Pomocí funkce size () získáte velikost mapy s názvem Students. To by mělo vrátit 2.
  10. Vytiskněte nějaký text na konzoli.
  11. Pomocí smyčky for vytvořte iterátor s názvem iterace nad prvky mapy s názvem Students.
  12. Vytiskněte na konzole hodnoty mapy Studenti.
  13. Konec těla smyčky for.
  14. Konec těla funkce main ().

Vkládání dat do std :: map

Položky můžete do std :: map zadávat pomocí funkce insert (). Nezapomeňte, že klíče std :: map musí být jedinečné.

Nejprve tedy zkontroluje, zda je každý klíč na mapě. Pokud je k dispozici, položka nebude vložena, ale vrátí iterátor pro existující položku. Pokud není k dispozici, položka se vloží.

Funkce má následující varianty:

  • insert (pair) - s touto variantou se do mapy vloží pár klíč – hodnota.
  • insert (start_itr, end_itr) - s touto variantou budou položky vloženy v rozsahu definovaném start_itr a end_itr z jiné mapy.

Funkce insert_or_assing () funguje stejně jako funkce insert (), ale pokud daný klíč již v mapě existuje, bude jeho hodnota změněna.

Příklad 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;}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví mapy.
  2. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
  3. Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
  4. Zavolejte funkci main (). {Označuje začátek těla funkce.
  5. Vytvořte mapu s názvem m, kde klíče budou celá čísla a hodnoty budou celá čísla. Do mapy byly provedeny tři záznamy.
  6. Vložte nový záznam do mapy m. Do mapy bude vložen klíč 5 a hodnota 6.
  7. Pokouší se provést záznam do již existujícího klíče. Protože klíč 1 již na mapě existuje, záznam nebude proveden.
  8. Použití funkce insert_or_assign () k vložení nebo úpravě existující položky. Protože klíč 1 již existuje, jeho hodnota se změní na 6.
  9. Vytiskněte nějaký text na konzoli. Znak "\ t" vytvoří vodorovný prostor, zatímco znak "\ n" přesune kurzor myši na další řádek.
  10. Pomocí smyčky for vytvořte iterátor s názvem itr k iteraci nad prvky mapy s názvem m.
  11. Vytiskněte hodnoty mapy m na konzole. Znak "\ t" vytváří vodorovný prostor mezi každým klíčem a jeho odpovídající hodnotou. Naproti tomu znak „\ n“ přesune kurzor myši na další řádek po každé iteraci.
  12. Konec těla pro smyčku.
  13. Po úspěšném dokončení musí program vrátit hodnotu.
  14. Konec těla funkce main ().

Hledání na mapě

Můžeme použít funkci find () k vyhledání prvků v mapě pomocí jejich klíčů. Pokud klíč nebyl nalezen, funkce vrátí std :: map :: end. V opačném případě bude vrácen iterátor prohledávaného prvku.

Příklad 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';}}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Zahrňte soubor záhlaví iostream do našeho kódu, abyste mohli používat jeho funkce bez chyb.
  2. Zahrňte soubor záhlaví řetězce do našeho kódu, abyste mohli používat jeho funkce bez chyb.
  3. Zahrňte soubor záhlaví mapy do našeho kódu, abyste mohli používat jeho funkce bez chyb.
  4. Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
  5. Zavolejte funkci main (). {Označuje začátek těla funkce main ().
  6. Vytvořte mapu s názvem Studenti, jejichž klíče budou celá čísla a řetězce hodnot.
  7. Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 200 a hodnota Alice.
  8. Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 201 a hodnota John.
  9. Hledejte hodnotu spojenou s klíčem 201.
  10. Pomocí příkazu if zkontrolujte, zda je nalezena hodnota klíče.
  11. Vytiskněte hodnotu klíče spolu s nějakým textem na konzole.
  12. Konec těla příkazu if.
  13. Konec těla funkce main ().

Odstranění dat z mapy

K odstranění hodnoty z mapy můžeme použít funkci erase (). Jednoduše vytvoříme iterátor, který ukazuje na prvek, který má být odstraněn. Iterátor je poté předán funkci erase ().

Příklad 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;}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
  2. Zahrňte soubor záhlaví řetězce do našeho kódu, abyste mohli používat jeho funkce.
  3. Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví mapy.
  4. Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
  5. Zavolejte funkci main (). {Označuje začátek těla funkce main ().
  6. Vytvořte mapu s názvem my_map, jejíž klíče budou řetězce a hodnoty celých čísel.
  7. Vložte hodnoty do mapy my_map. Do mapy bude vložen klíč krávy a hodnota 1.
  8. Vložte hodnoty do mapy my_map. Do mapy bude vložen klíč Cat a hodnota 2.
  9. Přidejte hodnotu 3 do mapy my_map s klíčem lva.
  10. Vytvořte iterátor pro iteraci přes mapu my_map hledající klíčovou kočku.
  11. Odstraňte prvek, na který ukazuje iterátor.
  12. Pomocí iterátoru můžete iterovat prvky mapy my_map od začátku do konce.
  13. Vytiskněte obsah mapy my_map na konzoli.
  14. Po úspěšném dokončení musí program vrátit výstup.
  15. Konec těla funkce main ().

Souhrn:

  • Mapa je asociativní kontejner, který ukládá položky v mapované podobě.
  • Každá položka na mapě má klíčovou hodnotu a namapovanou hodnotu.
  • Na mapě nemohou dvě mapované hodnoty sdílet klíčové hodnoty.
  • Klíčové hodnoty pomáhají při jedinečném třídění a identifikaci prvků.
  • Mapované hodnoty pomáhají při ukládání obsahu spojeného s klíčem.
  • Mapa C ++ ukládá jedinečné klíče v seřazeném pořadí.
  • Abychom mohli pracovat s mapou C ++, vytvoříme iterátor, který iteruje prvky.
  • S iterátorem můžeme provádět úkoly, jako je vyhledávání a mazání položek z mapy.