Kaart C ++ Standard Template Library (STL) näites

Lang L: none (table-of-contents):

Anonim

Mis on std :: map?

C ++ keeles on MAP assotsiatiivne konteiner, mis salvestab üksusi kaardistatud kujul. Iga üksus kaardil koosneb võtmeväärtusest ja vastendatud väärtusest. Kaks vastendatud väärtust ei saa jagada samu põhiväärtusi.

Põhiväärtused sobivad elementide kordumatuks sortimiseks ja tuvastamiseks. Kaardistatud väärtused on mõeldud võtmega seotud sisu salvestamiseks. Need kaks võivad tüübiti erineda, kuid liikmetüüp ühendab need paaritüübi kaudu, mis ühendab mõlemad.

Selles C ++ õpetuses saate teada:

  • Mis on std :: map?
  • Miks kasutada std :: mapi?
  • Süntaks:
  • Liikmete tüübid:
  • Sisseehitatud funktsioonid
  • Kordamine kaardi elementide kohal
  • Andmete sisestamine std :: mapi:
  • Kaardilt otsimine
  • Andmete kustutamine kaardilt

Miks kasutada std :: mapi?

Siin on kaardi kasutamise põhjused:

  • std :: map salvestab unikaalsed võtmed ainult valitud sortimiskriteeriumide alusel järjestatud järjekorras.
  • Elementide otsimine võtme abil on lihtne ja kiirem.
  • Igale võtmele on kinnitatud ainult üks element.
  • std :: kaarti saab kasutada assotsiatiivse massiivina.
  • std :: kaarti saab kahendpuude abil kasutada (tasakaalustatud).

Süntaks:

Std :: mapi deklareerimiseks kasutage seda süntaksit:

std::mapmap_name;
  • Key_datatype tähistab kaardiklahvide andmetüüpi.
  • Väärtus_tüübi tüüp tähistab kaardivõtmetele vastavate väärtuste andmetüüpi.
  • Kaardi_nimi on kaardi nimi.

Näiteks:

map my_map;

Kuulutasime välja kaardi nimega my_map. Kaart on stringi võti andmetüüpidel ja täisarvuni, väärtused andmetüüp.

Liikmete tüübid:

Liikmefunktsioonid võivad parameetrite või tagastustüübina kasutada järgmisi liikmetüüpe:

  • key_type: Key (malli esimene parameeter)
  • mapped_type: T (malli teine ​​parameeter)
  • key_compare: Võrdle (malli kolmas parameeter)
  • jaotaja_tüüp: Alloc (malli neljas parameeter)
  • väärtus_tüüp: paar
  • väärtus_võrdlus: Pesastatud funktsiooniklass elementide võrdlemiseks
  • viide: eraldaja tüüp: viide
  • const_reference: eraldaja_tüüp: const_reference
  • pointer: jaotaja_tüüp: pointer
  • const_pointer: eraldaja_tüüp: const_pointer
  • iteraator: kahesuunaline iteraator väärtusele_tüüp
  • const_iterator: kahesuunaline iteraator väärtusele const väärtus_type
  • reverse_iterator: vastupidine iteraator
  • const_reverse_iterator: pidev vastupidine iteraator
  • erinevus_tüüp: ptrdiff_t
  • size_type: size_t

Sisseehitatud funktsioonid

std :: mapil on sisseehitatud funktsioonid. Mõned neist hõlmavad järgmist:

  • begin () - see funktsioon tagastab iteraatori kaardi esimesele elemendile.
  • size () - see funktsioon tagastab üksuste arvu kaardil.
  • tühi () - see funktsioon tagastab Boole'i ​​väärtuse, mis tähistab, kas kaart on tühi.
  • insert (paar (võti, väärtus)) - see funktsioon lisab kaardile uue võtme-väärtuse paari.
  • find (val) - see funktsioon annab val-elemendile iteraatori, kui see on leitud. Vastasel juhul tagastab see m.end ().
  • Kustuta (iteraatori asend) - see funktsioon kustutab üksuse iteraatori poolt näidatud asukohas.
  • kustuta (const g) - see funktsioon kustutab kaardilt võtmeväärtuse g.
  • Kustuta () - see funktsioon kustutab kaardilt kõik üksused.

Kordamine kaardi elementide kohal

Saate kaardi elementide vahel korrata. Peame lihtsalt looma iteraatori ja kasutama seda selleks. Näiteks:

Näide 1:

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie koodi, et selle funktsioone kasutada.
  2. Selle funktsioonide kasutamiseks lisage stringi päisefail meie koodi.
  3. Kaasake kaardi päisefail meie koodi, et selle funktsioone kasutada.
  4. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage funktsioonile main (). {Tähistab funktsiooni keha algust.
  6. Looge kaart nimega Õpilased, kus võtmeteks on täisarvud ja väärtusteks stringid.
  7. Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 200 ja väärtus Alice.
  8. Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 201 ja Johni väärtus.
  9. Kasutage funktsiooni size (), et saada kaardi nimeks Õpilased. See peaks tagastama 2.
  10. Printige konsoolile tekst.
  11. Looge for a loop iteraatori nimega, et itereerida kaardi nimega Õpilased.
  12. Printige konsoolile kaardiõpilaste väärtused.
  13. For silmusekeha ots.
  14. Põhifunktsiooni () keha lõpp.

Andmete sisestamine std :: mapi

Funktsiooni insert () abil saate sisestada üksusi standardile :: map. Pidage meeles, et std :: map võtmed peavad olema kordumatud.

Niisiis kontrollib see kõigepealt, kas kaardil on olemas iga võti. Kui see on olemas, siis sisestust ei lisata, kuid see tagastab olemasoleva kirje iteraatori. Kui seda pole, lisatakse kirje.

Funktsioonil on järgmised variatsioonid:

  • insert (pair) - selle variatsiooniga sisestatakse kaardile võtme-väärtuste paar.
  • insert (start_itr, end_itr) - selle variatsiooniga sisestatakse kirjed teiselt kaardilt algus- ja lõpp-tit määratletud vahemikku.

Funktsioon insert_or_assing () töötab samamoodi nagu insert () funktsioon, kuid kui antud võti on kaardil juba olemas, muudetakse selle väärtust.

Näide 2:

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake kaardi päisefail meie koodi, et selle funktsioone kasutada.
  2. Kaasake iostreami päisefail meie koodi, et selle funktsioone kasutada.
  3. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  4. Helistage funktsioonile main (). {Tähistab funktsiooni keha algust.
  5. Looge kaart nimega m, kus võtmed on täisarvud ja väärtused on täisarvud. Kaardile on tehtud kolm kannet.
  6. Sisestage uus kanne kaardile m. Kaardile sisestatakse võti 5 ja väärtus 6.
  7. Püütakse sisestada juba olemasolev võti. Kuna võti 1 on kaardil juba olemas, siis sisestust ei tehta.
  8. Olemasoleva kirje lisamiseks või muutmiseks funktsiooni insert_or_assign () kasutamine. Kuna võti 1 on juba olemas, muudetakse selle väärtuseks 6.
  9. Printige konsoolile tekst. Märk "\ t" loob horisontaalse ruumi, samas kui märk "\ n" liigutab hiire kursori järgmisele reale.
  10. Kasutage a for silmust iteraatori nimeks itr, et itereerida kaardi nimega m.
  11. Printige konsoolile kaardi m väärtused. Märk "\ t" loob horisontaalse ruumi iga võtme ja selle vastava väärtuse vahele. Seevastu "\ n" märk liigutab hiire kursori iga korduse järel järgmisele reale.
  12. Silmuse jaoks keha ots.
  13. Eduka lõpetamise korral peab programm tagastama väärtuse.
  14. Põhifunktsiooni () keha lõpp.

Kaardilt otsimine

Funktsiooni find () abil saame kaardilt elemente otsida nende klahvide abil. Kui võtit ei leita, tagastab funktsioon std :: map :: end. Vastasel juhul tagastatakse otsitud elemendi iteraator.

Näide 2:

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Lisage iostreami päisefail meie koodi, et kasutada selle funktsioone ilma vigadeta.
  2. Lisage stringi päisefail meie koodi, et kasutada selle funktsioone ilma vigadeta.
  3. Lisage kaardi päisefail meie koodi, et selle funktsioone vigadeta kasutada.
  4. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage funktsioonile main (). {Tähistab põhi () funktsiooni keha algust.
  6. Looge kaart nimega Õpilased, mille võtmed on täisarvud ja väärtuste stringid.
  7. Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 200 ja väärtus Alice.
  8. Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 201 ja Johni väärtus.
  9. Otsige võtmega 201 seotud väärtust.
  10. Kasutage if-lauset, et kontrollida, kas võtme väärtus on leitud.
  11. Trükkige võtme väärtus konsooli mõne teksti kõrvale.
  12. If-lause sisu lõpp.
  13. Põhifunktsiooni () keha lõpp.

Andmete kustutamine kaardilt

Väärtuse kustutamiseks kaardilt saame kasutada funktsiooni erase (). Loome lihtsalt iteraatori, mis osutab kustutatavale elemendile. Seejärel suunatakse iteraator funktsiooni erase ().

Näide 3:

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie koodi, et selle funktsioone kasutada.
  2. Selle funktsioonide kasutamiseks lisage stringi päisefail meie koodi.
  3. Kaasake kaardi päisefail meie koodi, et selle funktsioone kasutada.
  4. Kaasake standardnimeruum meie koodi, et kasutada selle klasse ilma seda kutsumata.
  5. Helistage funktsioonile main (). {Tähistab põhifunktsiooni () algust.
  6. Looge kaart my_map, mille võtmeteks on stringid ja väärtused täisarvud.
  7. Sisestage väärtused kaardile my_map. Kaardile lisatakse võti lehmast ja väärtus 1.
  8. Sisestage väärtused kaardile my_map. Kaardi sisestatakse kassi võti ja väärtus 2.
  9. Lisage lõvi võtmega kaardile my_map väärtus 3.
  10. Looge iteraator kaardi my_map iteratsiooniks, otsides võtmekasssi.
  11. Kustutage iteraatori osutatud element.
  12. Kasutage iteraatori abil kaardi my_map elementide algusest lõpuni iteratsiooni.
  13. Printige konsoolil välja kaardi my_map sisu.
  14. Pärast edukat lõpetamist peab programm väljundi tagastama.
  15. Põhifunktsiooni () keha lõpp.

Kokkuvõte:

  • Kaart on assotsiatiivne konteiner, mis salvestab üksusi kaardistatud kujul.
  • Igal kaardil oleval elemendil on põhiväärtus ja vastendatud väärtus.
  • Kaardil ei saa kaks vastendatud väärtust jagada põhiväärtusi.
  • Põhiväärtused aitavad elemente ainulaadselt sorteerida ja tuvastada.
  • Kaardistatud väärtused aitavad võtmega seotud sisu salvestada.
  • C ++ kaart salvestab unikaalsed võtmed järjestatud järjekorras.
  • C ++ kaardiga töötamiseks loome elementide kordamiseks iteraatori.
  • Kordaja abil saame teha selliseid ülesandeid nagu üksuste otsimine ja kaardilt kustutamine.