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:
mapmy_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
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Zahrňte soubor záhlaví řetězce do našeho kódu, abyste mohli používat jeho funkce.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví mapy.
- Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
- Zavolejte funkci main (). {Označuje začátek těla funkce.
- Vytvořte mapu s názvem Studenti, kde klíče budou celá čísla a hodnoty budou řetězce.
- Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 200 a hodnota Alice.
- Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 201 a hodnota John.
- Pomocí funkce size () získáte velikost mapy s názvem Students. To by mělo vrátit 2.
- Vytiskněte nějaký text na konzoli.
- Pomocí smyčky for vytvořte iterátor s názvem iterace nad prvky mapy s názvem Students.
- Vytiskněte na konzole hodnoty mapy Studenti.
- Konec těla smyčky for.
- 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
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví mapy.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
- Zavolejte funkci main (). {Označuje začátek těla funkce.
- 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.
- Vložte nový záznam do mapy m. Do mapy bude vložen klíč 5 a hodnota 6.
- 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.
- 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.
- Vytiskněte nějaký text na konzoli. Znak "\ t" vytvoří vodorovný prostor, zatímco znak "\ n" přesune kurzor myši na další řádek.
- Pomocí smyčky for vytvořte iterátor s názvem itr k iteraci nad prvky mapy s názvem m.
- 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.
- Konec těla pro smyčku.
- Po úspěšném dokončení musí program vrátit hodnotu.
- 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
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Zahrňte soubor záhlaví iostream do našeho kódu, abyste mohli používat jeho funkce bez chyb.
- Zahrňte soubor záhlaví řetězce do našeho kódu, abyste mohli používat jeho funkce bez chyb.
- Zahrňte soubor záhlaví mapy do našeho kódu, abyste mohli používat jeho funkce bez chyb.
- Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
- Zavolejte funkci main (). {Označuje začátek těla funkce main ().
- Vytvořte mapu s názvem Studenti, jejichž klíče budou celá čísla a řetězce hodnot.
- Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 200 a hodnota Alice.
- Vložte hodnoty do mapy Studenti. Do mapy bude vložen klíč 201 a hodnota John.
- Hledejte hodnotu spojenou s klíčem 201.
- Pomocí příkazu if zkontrolujte, zda je nalezena hodnota klíče.
- Vytiskněte hodnotu klíče spolu s nějakým textem na konzole.
- Konec těla příkazu if.
- 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
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Zahrňte soubor záhlaví řetězce do našeho kódu, abyste mohli používat jeho funkce.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví mapy.
- Chcete-li používat jeho třídy, aniž byste jej volali, zahrňte do našeho kódu std namespace.
- Zavolejte funkci main (). {Označuje začátek těla funkce main ().
- Vytvořte mapu s názvem my_map, jejíž klíče budou řetězce a hodnoty celých čísel.
- Vložte hodnoty do mapy my_map. Do mapy bude vložen klíč krávy a hodnota 1.
- Vložte hodnoty do mapy my_map. Do mapy bude vložen klíč Cat a hodnota 2.
- Přidejte hodnotu 3 do mapy my_map s klíčem lva.
- Vytvořte iterátor pro iteraci přes mapu my_map hledající klíčovou kočku.
- Odstraňte prvek, na který ukazuje iterátor.
- Pomocí iterátoru můžete iterovat prvky mapy my_map od začátku do konce.
- Vytiskněte obsah mapy my_map na konzoli.
- Po úspěšném dokončení musí program vrátit výstup.
- 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.