Čo je std :: map?
V C ++ je MAP asociatívny kontajner na ukladanie položiek v mapovanej podobe. Každá položka na mape sa skladá z páru kľúč - hodnota a mapovanej hodnoty. Dve mapované hodnoty nemôžu zdieľať rovnaké kľúčové hodnoty.
Kľúčové hodnoty sú dobré na jedinečné triedenie a identifikáciu prvkov. Mapované hodnoty slúžia na ukladanie obsahu spojeného s kľúčom. Tieto dva typy sa môžu líšiť v typoch, ale typ člena ich kombinuje prostredníctvom typu páru, ktorý kombinuje obidva typy.
V tomto výučbe pre C ++ sa dozviete:
- Čo je std :: map?
- Prečo používať std :: map?
- Syntax:
- Typy členov:
- Vstavané funkcie
- Iterácia nad mapovými prvkami
- Vkladanie údajov do std :: map:
- Vyhľadávanie na mape
- Vymazanie údajov z mapy
Prečo používať std :: map?
Tu sú dôvody pre použitie mapy:
- std :: map ukladá jedinečné kľúče iba v zoradenom poradí na základe zvolených kritérií triedenia.
- Vyhľadanie prvkov pomocou klávesu je jednoduché a rýchlejšie.
- Ku každému kľúču je pripojený iba jeden prvok.
- std :: map možno použiť ako asociatívne pole.
- std :: map je možné implementovať pomocou binárnych stromov (vyvážené).
Syntax:
Ak chcete deklarovať std :: map, použite túto syntax:
std::mapmap_name;
- Key_datatype označuje dátový typ mapových kľúčov.
- Value_datatype označuje dátový typ hodnôt zodpovedajúcich mapovým kľúčom.
- Map_name je názov mapy.
Napríklad:
mapmy_map;
Vyhlásili sme mapu s názvom my_map. Mapa bude mať reťazec ako kľúčové dátové typy a celé číslo ako dátový typ hodnôt .
Typy členov:
Členské funkcie môžu používať nasledujúce typy členov ako parametre alebo návratový typ:
- key_type: Key (prvý parameter v šablóne)
- mapped_type: T (druhý parameter v šablóne)
- key_compare: Porovnanie (tretí parameter v šablóne)
- allocator_type: Alloc (štvrtý parameter v šablóne)
- value_type: pair
- value_compare: Vnorená funkčná trieda na porovnanie prvkov
- referencia: allocator_type :: referencia
- const_reference: typ alokátoru :: const_reference
- pointer: allocator_type :: pointer
- const_pointer: typ alokátoru :: const_pointer
- iterátor: obojsmerný iterátor na hodnotu_typ
- const_iterator: obojsmerný iterátor na konštantný typ_typu
- reverse_iterator: reverzný iterátor
- const_reverse_iterator: konštantný reverzný iterátor
- rozdiel_typ : ptrdiff_t
- size_type: size_t
Vstavané funkcie
std :: map prichádza s vstavanými funkciami. Niektoré z nich zahŕňajú:
- begin () - Táto funkcia vráti iterátor na prvú položku na mape.
- size () - Táto funkcia vráti počet položiek na mape.
- empty () - Táto funkcia vráti logickú hodnotu označujúcu, či je mapa prázdna.
- vložiť (pár (kľúč, hodnota)) - Táto funkcia vloží nový pár kľúč - hodnota na mapu.
- find (val) - Táto funkcia dáva iterátor prvku val, ak je nájdený. V opačnom prípade vráti m.end ().
- Vymazať (poloha iterátora) - Táto funkcia vymaže položku na mieste, na ktoré ukazuje iterátor.
- erase (const g) - Táto funkcia odstráni pár kľúč - hodnota g z mapy.
- Clear () - Táto funkcia odstráni všetky položky z mapy.
Iterácia nad mapovými prvkami
Môžete iterovať nad prvkami mapy. Potrebujeme jednoducho vytvoriť iterátor a použiť ho na to. Napríklad:
Príklad 1:
#include#include #include
Výkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky reťazca do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky mapy do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte do nášho kódu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Zavolajte funkciu main (). {Označuje začiatok tela funkcie.
- Vytvorte mapu s názvom Študenti, kde kľúčmi budú celé čísla a hodnotami budú reťazce.
- Vložte hodnoty do mapy Študenti. Do mapy bude vložený kľúč 200 a hodnota Alice.
- Vložte hodnoty do mapy Študenti. Do mapy bude vložený kľúč 201 a hodnota Jána.
- Pomocou funkcie size () získate veľkosť mapy s názvom Študenti. To by malo vrátiť 2.
- Vytlačte nejaký text na konzolu.
- Pomocou slučky for vytvorte iterátor s názvom iterácia prvkov mapy s názvom Students.
- Vytlačte hodnoty mapy Študenti na konzolu.
- Koniec tela slučky for.
- Koniec tela hlavnej () funkcie.
Vkladanie údajov do std :: map
Položky môžete zadávať do std :: map pomocou funkcie insert (). Pamätajte, že kľúče std :: map musia byť jedinečné.
Najprv teda skontroluje, či sa na mape nachádza každý kľúč. Ak je prítomný, záznam sa nevloží, vráti iterátor existujúceho záznamu. Ak nie je, položka sa vloží.
Táto funkcia má nasledujúce variácie:
- vložiť (pár) - s touto variáciou sa do mapy vloží pár kľúč - hodnota.
- insert (start_itr, end_itr) - s touto variáciou budú záznamy vložené v rozsahu definovanom start_itr a end_itr z inej mapy.
Funkcia insert_or_assing () funguje rovnako ako funkcia insert (), ale ak daný kľúč už v mape existuje, jeho hodnota sa upraví.
Príklad 2:
#include
Výkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky mapy do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte do nášho kódu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Zavolajte funkciu main (). {Označuje začiatok tela funkcie.
- Vytvorte mapu s názvom m, kde kľúče budú celé čísla a hodnoty budú celé čísla. Do mapy boli urobené tri záznamy.
- Vložte nový záznam do mapy m. Do mapy sa vloží kľúč 5 a hodnota 6.
- Pokúšam sa vytvoriť záznam do už existujúceho kľúča. Pretože kľúč 1 už na mape existuje, záznam nebude vykonaný.
- Pomocou funkcie insert_or_assign () môžete vložiť alebo upraviť existujúcu položku. Pretože kľúč 1 už existuje, jeho hodnota sa zmení na 6.
- Vytlačte nejaký text na konzolu. Znak „\ t“ vytvára vodorovný priestor, zatiaľ čo znak „\ n“ posúva kurzor myši na ďalší riadok.
- Pomocou slučky for vytvorte iterátor s názvom itr na iteráciu prvkov mapy s názvom m.
- Vytlačte hodnoty mapy m na konzole. Znak "\ t" vytvára horizontálny priestor medzi každým kľúčom a jeho zodpovedajúcou hodnotou. Naopak znak „\ n“ posúva kurzor myši na ďalší riadok po každej iterácii.
- Koniec tela pre slučku.
- Po úspešnom dokončení musí program vrátiť hodnotu.
- Koniec tela hlavnej () funkcie.
Vyhľadávanie na mape
Pomocou funkcie find () môžeme vyhľadávať prvky na mape podľa ich kľúčov. Ak sa kľúč nenájde, funkcia vráti std :: map :: end. V opačnom prípade sa vráti iterátor hľadaného prvku.
Príklad 2:
#include#include #include
Výkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie bez výskytu chýb.
- Zahrňte súbor hlavičky reťazca do nášho kódu, aby ste mohli používať jeho funkcie bez výskytu chýb.
- Zahrňte súbor hlavičky mapy do nášho kódu, aby ste mohli používať jeho funkcie bez výskytu chýb.
- Zahrňte do nášho kódu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Zavolajte funkciu main (). {Označuje začiatok tela funkcie main ().
- Vytvorte mapu s názvom Študenti, ktorých kľúčmi budú celé čísla a reťazce hodnôt.
- Vložte hodnoty do mapy Študenti. Do mapy bude vložený kľúč 200 a hodnota Alice.
- Vložte hodnoty do mapy Študenti. Do mapy bude vložený kľúč 201 a hodnota Jána.
- Vyhľadajte hodnotu spojenú s kľúčom 201.
- Pomocou príkazu if skontrolujte, či je nájdená hodnota kľúča.
- Vytlačte hodnotu kľúča spolu s niektorým textom na konzole.
- Koniec textu príkazu if.
- Koniec tela hlavnej () funkcie.
Vymazanie údajov z mapy
Na odstránenie hodnoty z mapy môžeme použiť funkciu erase (). Jednoducho vytvoríme iterátor, ktorý ukazuje na prvok, ktorý sa má vymazať. Iterátor sa potom odovzdá funkcii erase ().
Príklad 3:
#include#include #include
Výkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky reťazca do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky mapy do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte do nášho kódu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Zavolajte funkciu main (). {Označuje začiatok tela hlavnej funkcie ().
- Vytvorte mapu s názvom my_map, ktorej kľúčmi budú reťazce a hodnoty celých čísel.
- Vložte hodnoty do mapy my_map. Na mapu bude vložený kľúč kravy a hodnota 1.
- Vložte hodnoty do mapy my_map. Do mapy bude vložený kľúč Cat a hodnota 2.
- Pridajte hodnotu 3 do mapy my_map s kľúčom leva.
- Vytvorte iterátor, pomocou ktorého budete iterovať po mape my_map a hľadať kľúčovú mačku.
- Odstráňte prvok, na ktorý ukazuje iterátor.
- Pomocou iterátora iterujte prvky mapy my_map od začiatku do konca.
- Vytlačte obsah mapy my_map na konzole.
- Po úspešnom dokončení musí program vrátiť výstup.
- Koniec tela hlavnej () funkcie.
Zhrnutie:
- Mapa je asociatívny kontajner, ktorý ukladá položky v mapovanej podobe.
- Každá položka na mape má kľúčovú hodnotu a mapovanú hodnotu.
- Na mape nemôžu dve namapované hodnoty zdieľať kľúčové hodnoty.
- Kľúčové hodnoty pomáhajú pri jedinečnom triedení a identifikácii prvkov.
- Mapované hodnoty pomáhajú pri ukladaní obsahu spojeného s kľúčom.
- Mapa C ++ ukladá jedinečné kľúče v zoradenom poradí.
- Aby sme mohli pracovať s mapou C ++, vytvoríme iterátor na iteráciu prvkov.
- Pomocou iterátora môžeme vykonávať úlohy, ako je vyhľadávanie a odstraňovanie položiek z mapy.