Térkép be C++ Szabványos sablonkönyvtár (STL)
Miben van a térkép C++? Szintaxis
In C++Egy MAP egy asszociatív tároló, amely az elemeket leképezett formában tárolja. A térkép minden eleme kulcsértékből és egy leképezett értékből áll. Két leképezett érték nem oszthatja meg ugyanazokat a kulcsértékeket.
A kulcsértékek alkalmasak az elemek egyedi rendezésére és azonosítására. A leképezett értékek a kulccsal társított tartalom tárolására szolgálnak. A kettő típusban különbözhet, de a tagtípus kombinálja őket egy pártípuson keresztül, amely mindkettőt kombinálja.
Miért használja az std::map-et?
Íme a térkép használatának okai:
- std:: a térkép az egyedi kulcsokat csak a kiválasztott rendezési feltételek alapján rendezett sorrendben tárolja.
- Egyszerűen és gyorsabban kereshet elemeket a gomb segítségével.
- Minden kulcshoz csak egy elem van rögzítve.
- Az std::map asszociatív tömbként használható.
- Az std::map bináris fákkal valósítható meg (kiegyensúlyozott).
Szintaxis
Az std::map deklarálásához használja a következő szintaxist:
std::map<key_datatype, value_datatype>map_name;
- A
key_datatype
a térképkulcsok adattípusát jelöli. - A
value_datatype
a leképezési kulcsoknak megfelelő értékek adattípusát jelöli. - A
map_name
a térkép neve.
Például:
map<string, int> my_map;
nevű térképet deklaráltunk my_map
. A térképen lesz egy as karakterlánc kulcs adattípusok és egész szám mint értékek adattípus.
Tagtípusok
A tagfüggvények a következő tagtípusokat használhatják paraméterként vagy visszatérési típusként:
- key_type: Kulcs (az első paraméter a sablonban)
- mapped_type: T (a második paraméter a sablonban)
- key_compare: Összehasonlítás (a harmadik paraméter a sablonban)
- allocator_type: Alloc (a negyedik paraméter a sablonban)
- érték tipusa: pár
- value_compare: Beágyazott függvényosztály az elemek összehasonlításához
- referencia: allocator_type::reference
- const_reference: allocator_type::const_reference
- mutató: allocator_type::pointer
- const_pointer: allocator_type::const_pointer
- iterátor: egy kétirányú iterátor az érték_típushoz
- const_iterator: egy kétirányú iterátor a const érték_típushoz
- reverse_iterator: egy fordított iterátor
- const_reverse_iterator: állandó fordított iterátor
- differencia_típus: ptrdiff_t
- méret típus: méret_t
Az std::map beépített funkciói
Az std::map beépített funkciókkal rendelkezik. Ezek közül néhány a következőket tartalmazza:
- kezdődik () – Ez a függvény visszaállítja az iterátort a térkép első eleméhez.
- méret () -Ez a függvény a térkép elemeinek számát adja vissza.
- üres() –Ez a függvény egy logikai értéket ad vissza, amely jelzi, hogy a térkép üres-e.
- beszúr( pár(kulcs, érték)) – Ez a függvény új kulcs-érték párt szúr be a térképbe.
- find(val) – Ez a függvény megadja az iterátort a val elemnek, ha megtalálható. Ellenkező esetben az m.end() értéket adja vissza.
- Törlés (iterátor pozíció) – Ez a funkció törli az iterátor által megjelölt helyen lévő elemet.
- törlés (konst g) – Ez a funkció törli a g kulcsértéket a térképről.
- Egyértelmű () -Ez a funkció törli az összes elemet a térképről.
Iteráció a térképelemeken keresztül
Iterálhat a térképelemek között. Egyszerűen létre kell hoznunk egy iterátort, és ezt használnunk kell.
Például:
Példa 1:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
- Szerelje be a karakterlánc-fejlécfájlt a kódunkba, hogy használni tudja a funkcióit.
- Szerelje be a térképfejléc fájlt a kódunkba a funkcióinak használatához.
- Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja a
main()
funkció. A { a függvény törzsének kezdetét jelöli. - Hozzon létre egy Tanulók nevű térképet, ahol a kulcsok egész számok, az értékek pedig karakterláncok lesznek.
- Szúrjon be értékeket a térképre Diákok. Egy 200-as kulcs és egy Alice érték bekerül a térképbe.
- Szúrjon be értékeket a térképre Diákok. A 201-es kulcs és a János értéke bekerül a térképbe.
- Használja a
size()
függvény segítségével megkaphatja a Diákok nevű térkép méretét. Ennek 2-t kell visszaadnia. - Nyomtasson szöveget a konzolra.
- A for ciklus segítségével hozzon létre egy iterátort, amely a Tanulók nevű térkép elemei felett iterál.
- Nyomtassa ki a Diákok térkép értékeit a konzolon.
- A for ciklus törzsének vége.
- A test vége a
main()
funkciót.
Adatok beszúrása std::map-be
Az std::map-be a következővel írhat be elemeket insert()
funkció. Ne feledje, hogy az std::map kulcsoknak egyedinek kell lenniük.
Tehát először ellenőrzi, hogy minden kulcs megtalálható-e a térképen. Ha jelen van, a bejegyzés nem kerül beillesztésre, de visszaadja a meglévő bejegyzés iterátorát. Ha nincs jelen, a bejegyzés beszúrásra kerül.
A függvénynek a következő változatai vannak:
- betét(pár) – ezzel a változattal egy kulcs-érték pár kerül beillesztésre a térképbe.
- insert(start_itr, end_itr) – ezzel a változattal a bejegyzések egy másik térkép start_itr és end_itr által meghatározott tartományába kerülnek be.
A insert_or_assing() funkció ugyanúgy működik, mint insert()
függvényt, de ha az adott kulcs már létezik a térképen, akkor az értéke módosul.
Példa 2:
#include <map> #include <iostream> using namespace std; int main() { map<int, int> 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; }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Szerelje be a térképfejléc fájlt a kódunkba a funkcióinak használatához.
- Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
- Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja a
main()
funkció. A { a függvény törzsének kezdetét jelöli. - Hozzon létre egy m nevű térképet, ahol a kulcsok egész számok, az értékek pedig egész számok lesznek. Három bejegyzés került a térképre.
- Szúrjon be egy új bejegyzést a térképre m. Egy 5-ös kulcs és egy 6-os érték kerül beillesztésre a térképbe.
- Megpróbál belépni egy már meglévő kulcsba. Mivel az 1-es kulcs már létezik a térképen, a bejegyzés nem történik meg.
- az
insert_or_assign()
funkció egy meglévő bejegyzés beszúrásához vagy módosításához. Mivel az 1-es kulcs már létezik, értéke 6-ra változik. - Nyomtasson szöveget a konzolra. A „\t” karakter vízszintes szóközt hoz létre, míg a „\n” karakter a következő sorra mozgatja az egérkurzort.
- Használat hurokhoz itr nevű iterátor létrehozásához a térkép m nevű elemei feletti iterációhoz.
- Nyomtassa ki a térkép m értékeit a konzolon. A „\t” karakter vízszintes szóközt hoz létre az egyes billentyűk és a megfelelő érték között. Ezzel szemben a „\n” karakter minden iteráció után a következő sorra mozgatja az egérkurzort.
- A for hurok törzsének vége.
- A programnak értéket kell visszaadnia a sikeres befejezés után.
- A test vége a
main()
funkciót.
Keresés a térképen
Használhatjuk a find()
funkció segítségével a kulcsok alapján kereshet elemeket a térképen. Ha a kulcs nem található, a függvény a következőt adja vissza: std::map::end. Ellenkező esetben a keresett elem iterátora kerül visszaadásra.
Példa 3:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Szerelje be az iostream fejlécfájlt a kódunkba, hogy hiba nélkül használhassa funkcióit.
- Szerelje be a karakterlánc-fejlécfájlt a kódunkba, hogy hiba nélkül használhassa funkcióit.
- Szerelje be a térképfejléc fájlt a kódunkba, hogy hiba nélkül használhassa funkcióit.
- Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja a
main()
funkció. A { jelöli a törzs kezdetétmain()
funkciót. - Hozzon létre egy Tanulók nevű térképet, amelynek kulcsai egész számok és értékláncok lesznek.
- Szúrjon be értékeket a térképre Diákok. Egy 200-as kulcs és egy Alice érték bekerül a térképbe.
- Szúrjon be értékeket a térképre Diákok. A 201-es kulcs és a János értéke bekerül a térképbe.
- Keresse meg a 201-es kulcshoz tartozó értéket.
- Használjon if utasítást annak ellenőrzésére, hogy a kulcs értéke megtalálható-e.
- Nyomtassa ki a kulcs értékét néhány szöveg mellé a konzolon.
- Az if utasítás törzsének vége.
- A test vége a
main()
funkciót.
Adatok törlése a térképről
Használhatjuk a erase()
funkcióval törölhet egy értéket a térképről. Egyszerűen létrehozunk egy iterátort, amely a törölni kívánt elemre mutat. Az iterátor ezután átkerül a erase()
funkciót.
Példa 4:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
- Szerelje be a karakterlánc-fejlécfájlt a kódunkba, hogy használni tudja a funkcióit.
- Szerelje be a térképfejléc fájlt a kódunkba a funkcióinak használatához.
- Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja a
main()
funkció. A { a törzsének kezdetét jelölimain()
funkciót. - Hozzon létre egy térképet my_map néven, amelynek kulcsai karakterláncok és értékek egész számok lesznek.
- Értékek beszúrása a my_map térképbe. A Cow kulcs és az 1 érték bekerül a térképbe.
- Értékek beszúrása a my_map térképbe. A Cat kulcs és a 2 érték bekerül a térképbe.
- Adjon hozzá egy 3-as értéket a my_map térképhez egy oroszlánkulccsal.
- Hozzon létre egy iterátort a térképen való iterációhoz a my_map a kulcsmacskát keresve.
- Törölje az iterátor által mutatott elemet.
- Használjon iterátort a my_map térkép elemeinek iterálásához az elejétől a végéig.
- Nyomtassa ki a térkép my_map tartalmát a konzolon.
- Sikeres befejezés után a programnak vissza kell adnia a kimenetet.
- A test vége a
main()
funkciót.
Összegzésként
- A térkép egy asszociatív tároló, amely az elemeket leképezett formában tárolja.
- A térkép minden eleméhez tartozik egy kulcsérték és egy leképezett érték.
- Egy térképen két leképezett érték nem oszthatja meg a kulcsértékeket.
- A kulcsértékek segítenek az elemek egyedi rendezésében és azonosításában.
- A leképezett értékek segítenek a kulccsal társított tartalom tárolásában.
- C++ A térkép az egyedi kulcsokat rendezett sorrendben tárolja.
- Valakivel együtt dolgozni C++ térképet, létrehozunk egy iterátort, amely az elemek felett iterál.
- Az iterátorral olyan feladatokat hajthatunk végre, mint például elemek keresése és törlése a térképről.