Térkép be C++ Szabványos sablonkönyvtár (STL)
⚡ Okos összefoglaló
Térkép be C++ egy asszociatív konténer a Standard Template Library-ből, amely rendezett kulcs-érték párokként tárolja az elemeket, ahol minden egyedi kulcs egy értékhez tartozik, és lehetővé teszi a gyors keresést, beszúrást és rendezett bejárást.

Miben van a térkép C++?
In C++A MAP egy asszociatív konténer, amely leképezett formában tárolja az elemeket. A leképezés minden eleme egy kulcsértékből és egy leképezett értékből áll. Két leképezett érték nem rendelkezhet ugyanazzal a kulcsértékkel.
A kulcsértékek hasznosak az elemek egyedi rendezéséhez és azonosításához, míg a leképezett értékek az egyes kulcsokhoz társított tartalmat tárolják. A kettő típusban eltérhet, de a tagtípus egy olyan párrá egyesíti őket, amely mindkettőt tartalmazza.
Mielőtt bármilyen kódot írnánk, érdemes megérteni, miért a térkép a megfelelő tárolóeszköz.
Miért használja az std::map-et?
Íme néhány ok a térkép használatára:
- Az std::map csak az egyedi kulcsokat tárolja, rendezett sorrendben a kiválasztott rendezési feltételek alapján.
- A kulcs segítségével egyszerű és gyors az elemek keresése.
- Minden kulcshoz csak egy elem van rögzítve.
- Az std::map asszociatív tömbként használható.
- Az std::map kiegyensúlyozott bináris fák segítségével valósítható meg.
Ezen előnyök kihasználásához kezdjük a deklarációs szintaxissal.
Szintaxis
Az std::map deklarálásához használja a következő szintaxist:
std::map<key_datatype, value_datatype>map_name;
- Az kulcs_adattípus a térképkulcsok adattípusát jelöli.
- Az érték_adattípus a leképezési kulcsoknak megfelelő értékek adattípusát jelöli.
- Az térkép_neve a térkép neve.
Például:
map<string, int> my_map;
Deklaráltunk egy my_map nevű map-et. A map kulcs adattípusa egy karakterlánc, érték adattípusa pedig egy egész szám lesz.
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 (a sablon első paramétere)
- mapped_type: T (a sablon második paramétere)
- key_compare: Összehasonlítás (a sablon harmadik paramétere)
- allocator_type: Alloc (a sablon negyedik paramétere)
- é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 az iterátort a térkép első elemére adja vissza.
- méret () – Ez a függvény visszaadja a térképen található elemek számát.
- üres() – Ez a függvény egy logikai értéket ad vissza, amely jelzi, hogy egy map üres-e.
- beszúr(pár(kulcs, érték)) – Ez a függvény egy új kulcs-érték párt szúr be egy térképbe.
- keres(érték) – Ez a függvény visszaadja a val elem iterátorát, ha az megtalálható. Egyébként m.end() értéket ad vissza.
- törlés (iterátor pozíció) – Ez a függvény törli az iterátor által mutatott pozícióban lévő elemet.
- törlés (konst g) – Ez a függvény törli a g kulcs-értéket egy leképezésből.
- egyértelmű() – Ez a függvény az összes elemet törli a térképről.
A definiált függvények után a következő példák az iterációval kezdve működésbe hozzák őket.
Iteráció a térképelemeken keresztül
Végig iterálhatsz a térkép elemein. Ehhez egyszerűen létre kell hoznunk egy iterátort, és azt kell használnunk. 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:
Code Magyarázat:
- 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 meg a main() függvényt. 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áld a size() függvényt a Students nevű térkép méretének lekéréséhez. Ennek 2-es értéket 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 main() függvény törzsének vége.
Adatok beszúrása std::map-be
Az std::map függvénybe az insert() függvénnyel vihet be elemeket. Ne feledje, hogy az std::map kulcsoknak egyedieknek kell lenniük.
Tehát először ellenőrzi, hogy az egyes kulcsok jelen vannak-e a térképen. Ha jelen vannak, a bejegyzés nem kerül beszúrásra, de visszaadja a meglévő bejegyzés iterátorát. Ha nincs jelen, akkor a bejegyzés beszúrásra kerül.
A függvénynek a következő változatai vannak:
- beszúrás(pár) – ennél a variációnál egy kulcs-érték párt illesztenek be a térképbe.
- beszúrás(kezdő_szám, vég_szám) – ennél a változatnál a bejegyzések egy másik map start_itr és end_itr által meghatározott tartományon belül lesznek beszúrva.
Az insert_or_assign() függvény ugyanúgy működik, mint az insert() függvény, de ha a megadott kulcs már létezik a map-ben, 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:
Code Magyarázat:
- 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 meg a main() függvényt. 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() függvény használata egy meglévő bejegyzés beszúrásához vagy módosításához. Mivel az 1-es kulcs már létezik, az é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 ciklus törzsének vége.
- A programnak értéket kell visszaadnia a sikeres befejezés után.
- A main() függvény törzsének vége.
Keresés a térképen
A find() függvénnyel kulcsok alapján kereshetünk elemeket egy map-ben. Ha a kulcs nem található, a függvény std::map::end értéket ad vissza. Ellenkező esetben a keresett elem egy iterátorát adja vissza.
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:
Code Magyarázat:
- 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ívd meg a main() függvényt. A { a main() függvény törzsének kezdetét jelöli.
- 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 main() függvény törzsének vége.
Adatok törlése a térképről
Az erase() függvénnyel törölhetünk egy értéket egy map-ből. Egyszerűen létrehozunk egy iterátort, amely a törlendő elemre mutat. Az iterátort ezután átadjuk az erase() függvénynek.
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:
Code Magyarázat:
- 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ívd meg a main() függvényt. A { a main() függvény törzsének kezdetét jelöli.
- 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álj egy iterátort a my_map map elemeinek végigjárására 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 main() függvény törzsének vége.






