Térkép a C ++ szabványos sablonkönyvtárban (STL) a példával

Mi az std :: map?

A C ++ nyelven a MAP egy asszociatív tároló, amely elemeket tárol formában. A térkép minden eleme kulcsértékből és 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ípusonként különbözhet, de a tagtípus kombinálja őket egy pártípuson keresztül, amely mindkettőt egyesíti.

Ebben a C ++ oktatóanyagban megtudhatja:

  • Mi az std :: map?
  • Miért használja az std :: map-ot?
  • Szintaxis:
  • Tagok típusai:
  • Beépített funkciók
  • A térképi elemek fölött ismétlődik
  • Adatok beszúrása a std :: map-ba:
  • Keresés egy térképen
  • Adatok törlése egy térképről

Miért használja az std :: map-ot?

Íme a térkép használatának okai:

  • Az std :: map egyedi kulcsokat csak a kiválasztott rendezési kritériumok alapján rendezett sorrendben tárolja.
  • Könnyű és gyorsabb elemeket keresni a kulcs segítségével.
  • Minden kulcshoz csak egy elem van csatolva.
  • Az std :: map asszociatív tömbként használható.
  • Az std :: map bináris fák segítségével valósítható meg (kiegyensúlyozott).

Szintaxis:

Az std :: map deklarálásához használja ezt a szintaxist:

std::mapmap_name;
  • A key_datatype a térképkulcsok adattípusát jelöli.
  • Az value_datatype a térképkulcsoknak megfelelő értékek adattípusát jelöli.
  • A map_name a térkép neve.

Például:

map my_map;

Kijelentettük a my_map nevű térképet. A térkép egy karakterláncot fog tartalmazni a kulcsadattípusokként , az egész pedig az értékek adattípusát.

Tagok típusai:

A tag függvények a következő tagtípusokat használhatják paraméterként vagy visszatérési típusként:

  • key_type: Key (A sablon első paramétere)
  • mapped_type: T (A sablon második paramétere)
  • key_compare: Összehasonlítás (A sablon harmadik paramétere)
  • allokátor_típus: Alloc (A sablon negyedik paramétere)
  • érték_típus: pár
  • value_compare: Beágyazott függvényosztály az elemek összehasonlításához
  • referencia: allokátor_típus :: referencia
  • const_reference: allokátor_típus :: const_reference
  • pointer: allokátor_típus :: pointer
  • const_pointer: allokátor_típus :: const_pointer
  • iterátor: kétirányú iterátor az érték_típushoz
  • const_iterator: kétirányú iterátor az const value_type értékhez
  • fordított_iterátor : fordított iterátor
  • const_reverse_iterator: állandó fordított iterátor
  • különbségtípus: ptrdiff_t
  • size_type: size_t

Beépített funkciók

Az std :: map beépített funkciókkal rendelkezik. Ezek egy része a következőket tartalmazza:

  • begin () - Ez a függvény visszatér az iterátorhoz a térkép első eleméhez.
  • size () - Ez a függvény visszaadja a térképen szereplő elemek számát.
  • empty () - Ez a függvény logikai értéket ad vissza, jelezve, hogy egy térkép üres-e.
  • insert (pár (kulcs, érték)) - Ez a függvény új kulcs-érték párost illeszt be egy 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 mutatott pozíciót.
  • törlés (const g) - Ez a függvény törli a g kulcsértéket a térképről.
  • Törlés () - Ez a funkció töröl minden elemet a térképről.

A térképi elemek fölött ismétlődik

Iterálhat a térkép elemein. Egyszerűen létre kell hoznunk egy iterátort, és ezt kell használnunk. Például:

1. példa:

#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;}}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. A funkcióinak használatához vegye fel az iostream fejlécfájlt a kódunkba.
  2. A függvények használatához vegye fel a string fejlécfájlt a kódunkba.
  3. Felvegye a térkép fejlécfájlját a kódunkba annak funkcióinak használatához.
  4. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja meg a main () függvényt. A {a függvény törzsének kezdetét jelöli.
  6. Hozzon létre egy Student nevű térképet, ahol a kulcsok egész számok lesznek, és az értékek karakterláncok lesznek.
  7. Helyezzen be értékeket a térképbe. Egy 200-as kulcs és egy Alice-érték kerül a térképbe.
  8. Helyezzen be értékeket a térképbe. A térképbe beilleszt egy 201-es kulcsot és egy John-értéket.
  9. Használja a size () függvényt a Student nevű térkép méretének megszerzéséhez. Ennek vissza kell adnia egy 2-t.
  10. Nyomtasson ki egy kis szöveget a konzolra.
  11. Használjon egy for for ciklust egy iterátor létrehozására, amely a Térkép Diákok nevű elemei fölé kerül.
  12. Nyomtassa ki a konzolon a térkép diákok értékeit.
  13. A for hurok testének vége.
  14. A fő () függvény törzsének vége.

Adatok beszúrása az std :: térképbe

Az elemeket beírhatja az std :: mapba az insert () függvény használatával. 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 ismétlőjét. Ha nincs, a bejegyzés beillesztésre kerül.

A függvény a következő variációkkal rendelkezik:

  • insert (pair) - ezzel a variációval kulcs-érték pár kerül a térképbe.
  • insert (start_itr, end_itr) - ezzel a variációval a bejegyzések egy másik térképről a start_itr és end_itr által meghatározott tartományba kerülnek.

Az insert_or_assing () függvény ugyanúgy működik, mint az insert () függvény, de ha az adott kulcs már létezik a térképen, akkor annak értéke módosul.

2. példa:

#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;}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Felvegye a térkép fejlécfájlját a kódunkba annak funkcióinak használatához.
  2. A funkcióinak használatához vegye fel az iostream fejlécfájlt a kódunkba.
  3. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hívja meg a main () függvényt. A {a függvény törzsének kezdetét jelöli.
  5. Hozzon létre egy m nevű térképet, ahol a kulcsok egész számok lesznek, az értékek pedig egész számok lesznek. Három bejegyzés készült a térképre.
  6. Helyezzen be egy új bejegyzést a m térképbe. Egy 5-ös és egy 6-os kulcs kerül beillesztésre a térképbe.
  7. Megpróbál bejegyzést tenni egy már létező kulcsba. Mivel az 1 kulcs már létezik a térképen, a bejegyzés nem kerül végrehajtásra.
  8. Az insert_or_assign () függvény használatával meglévő bejegyzés beszúrásához vagy módosításához. Mivel az 1 kulcs már létezik, az értéke 6-ra változik.
  9. Nyomtasson ki egy kis szöveget a konzolra. A "\ t" karakter vízszintes teret hoz létre, míg a "\ n" karakter az egér kurzort a következő sorra mozgatja.
  10. Használjon egy for for ciklust az itr nevű iterátor létrehozásához, amely az m nevű térkép elemeinek iterációjára szolgál.
  11. Nyomtassa ki az m térkép értékeit a konzolra. A "\ t" karakter vízszintes teret hoz létre az egyes kulcsok és a hozzájuk tartozó értékek között. Ezzel szemben a "\ n" karakter minden iteráció után az egér kurzort a következő sorra mozgatja.
  12. A hurok testének vége.
  13. A programnak a sikeres befejezés után vissza kell térnie az értékre.
  14. A fő () függvény törzsének vége.

Keresés egy térképen

A find () függvényt használhatjuk a térkép elemeinek keresésére a kulcsukkal. Ha a kulcs nem található, a függvény visszaadja az std :: map :: end parancsot. Ellenkező esetben a keresett elem ismétlője visszatér.

2. példa:

#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';}}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Vegye fel az iostream fejlécfájlt a kódunkba, hogy hibajavítás nélkül használhassa a funkcióit.
  2. Vegye fel a string fejlécfájlt a kódunkba, hogy hibajavítás nélkül használhassa a funkcióit.
  3. Vegye fel a térkép fejlécfájlját kódunkba, hogy hibajavítás nélkül használhassa a funkcióit.
  4. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja meg a main () függvényt. A {a main () függvény törzsének kezdetét jelöli.
  6. Hozzon létre egy diák nevű térképet, amelynek kulcsai egész számok és értékek lesznek.
  7. Helyezzen be értékeket a térképbe. Egy 200-as kulcs és egy Alice-érték kerül a térképbe.
  8. Helyezzen be értékeket a térképbe. A térképbe beilleszt egy 201-es kulcsot és egy John-értéket.
  9. Keresse meg a 201-es kulccsal társított értéket.
  10. Használjon egy if utasítást annak ellenőrzéséhez, hogy a kulcs értéke megtalálható-e.
  11. Nyomtassa ki a kulcs értékét a konzolon lévő szöveg mellé.
  12. Az if utasítás törzsének vége.
  13. A fő () függvény törzsének vége.

Adatok törlése egy térképről

Az erase () függvény segítségével törölhetünk egy értéket a térképről. Egyszerűen létrehozunk egy iterátort, amely a törlendő elemre mutat. Ezután az iterátor átkerül az erase () függvényre.

3. példa:

#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;}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. A funkcióinak használatához vegye fel az iostream fejlécfájlt a kódunkba.
  2. A függvények használatához vegye fel a string fejlécfájlt a kódunkba.
  3. Felvegye a térkép fejlécfájlját a kódunkba annak funkcióinak használatához.
  4. Vegye fel az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja meg a main () függvényt. A {a fő () függvény törzsének kezdetét jelöli.
  6. Hozzon létre egy my_map nevű térképet, amelynek kulcsai karakterláncok és egész számok lesznek.
  7. Helyezzen be értékeket a my_map térképbe. A tehén kulcsát és az 1 értékét beillesztjük a térképbe.
  8. Helyezzen be értékeket a my_map térképbe. A Cat kulcsát és 2-es értékét beillesztjük a térképbe.
  9. Adjon hozzá egy 3 értéket a my_map térképhez egy oroszlán kulcsával.
  10. Hozzon létre egy iterátort a my_map térképen történő ismétléshez, és a kulcs macskát keresi.
  11. Törölje az iterátor által mutatott elemet.
  12. Az iterátor segítségével iterálhat a my_map térkép elemein az elejétől a végéig.
  13. Nyomtassa ki a konzolon a my_map térkép tartalmát.
  14. A programnak a sikeres befejezés után vissza kell adnia a kimenetet.
  15. A fő () függvény törzsének vége.

Összegzés:

  • A térkép egy asszociatív tároló, amely leképezett formában tárolja az elemeket.
  • A térkép minden elemének van kulcsértéke és leképezett értéke.
  • 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.
  • A C ++ térkép egyedi kulcsokat rendezett sorrendben tárol.
  • A C ++ térképpel való együttműködéshez létrehozunk egy iterátort az elemek feletti iterációhoz.
  • Az iterátor segítségével olyan feladatokat hajthatunk végre, mint az elemek keresése és törlése a térképről.

érdekes cikkek...