Kaart sisse C++ Standardmalliteek (STL)
Milles on kaart C++? Süntaks
In C++on MAP on 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 võtmeväärtusi.
Võtmeväärtused sobivad elementide kordumatuks sortimiseks ja tuvastamiseks. Vastandatud väärtused on mõeldud võtmega seotud sisu salvestamiseks. Need kaks võivad tüüpide poolest erineda, kuid liikmetüüp ühendab need paaritüübi kaudu, mis ühendab mõlemad.
Miks kasutada std::map?
Siin on kaardi kasutamise põhjused:
- std:: kaart salvestab unikaalsed võtmed ainult sorteeritud järjekorras valitud sortimiskriteeriumide alusel.
- Võtme abil on elemente lihtne ja kiirem otsida.
- Igale võtmele on kinnitatud ainult üks element.
- std::map saab kasutada assotsiatiivse massiivina.
- std::map on rakendatav kahendpuude abil (tasakaalustatud).
Süntaks
Std::map deklareerimiseks kasutage järgmist süntaksit:
std::map<key_datatype, value_datatype>map_name;
- .
key_datatype
tähistab kaardivõtmete andmetüüpi. - .
value_datatype
tähistab kaardivõtmetele vastavate väärtuste andmetüüpi. - .
map_name
on kaardi nimi.
Näiteks:
map<string, int> my_map;
Me kuulutasime kaardi nimega my_map
. Kaardil on string as võti andmetüübid ja täisarv as väärtused andmetüüp.
Liikmete tüübid
Liikmefunktsioonid võivad parameetrite või tagastustüübina kasutada järgmisi liikmetüüpe:
- key_type: Võti (malli esimene parameeter)
- mapped_type: T (teine parameeter mallis)
- key_compare: Võrdle (malli kolmas parameeter)
- allokaatori_tüüp: Alloc (malli neljas parameeter)
- väärtuse_tüüp: paar
- value_compare: Pesastatud funktsiooniklass elementide võrdlemiseks
- viide: allocator_type::reference
- const_reference: allocator_type::const_reference
- pointer: allocator_type::pointer
- const_pointer: allocator_type::const_pointer
- iteraator: väärtuse_tüüpi kahesuunaline iteraator
- const_iterator: kahesuunaline iteraator väärtusele const value_type
- reverse_iterator: vastupidine iteraator
- const_reverse_iterator: pidev tagurpidi iteraator
- erinevus_tüüp: ptrdiff_t
- size_type: suurus_t
Std::map sisseehitatud funktsioonid
std::kaardil on sisseehitatud funktsioonid. Mõned neist hõlmavad järgmist:
- alusta () – See funktsioon tagastab iteraatori kaardi esimesele elemendile.
- suurus () -See funktsioon tagastab kaardil olevate üksuste arvu.
- tühi () –See funktsioon tagastab Boole'i väärtuse, mis näitab, kas kaart on tühi.
- sisesta (paar(võti, väärtus)) – See funktsioon lisab kaardile uue võtme-väärtuse paari.
- leia(val) – See funktsioon annab iteraatori val elemendile, kui see leitakse. Vastasel juhul tagastab see m.end().
- Kustuta (iteraatori asukoht) – See funktsioon kustutab elemendi iteraatori näidatud kohas.
- kustuta (konst g) – See funktsioon kustutab kaardilt võtmeväärtuse g.
- Selge () –See funktsioon kustutab kõik üksused kaardilt.
Itereerimine üle kaardielementide
Saate korrata kaardielemente. Peame lihtsalt looma iteraatori ja seda selleks kasutama.
Näiteks:
Näide 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; } }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Selle funktsioonide kasutamiseks lisage meie koodi stringi päise fail.
- Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Helistage
main()
funktsiooni. { tähistab funktsiooni keha algust. - Looge kaart nimega Õpilased, kus võtmeteks on täisarvud ja väärtusteks stringid.
- Sisestage väärtused kaardile Õpilased. Võti 200 ja Alice'i väärtus sisestatakse kaardile.
- Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 201 ja Johni väärtus.
- Kasuta
size()
funktsioon, et saada kaardi nimega Õpilased suurust. See peaks tagastama 2. - Printige konsoolile teksti.
- Kasutage for-silmust, et luua iteraator nimega see, et itereerida üle kaardi elemente nimega Õpilased.
- Printige konsoolile kaardi Õpilased väärtused.
- For-silmuse keha lõpp.
- Keha lõpp
main()
funktsiooni.
Andmete sisestamine kausta std::map
Saate sisestada üksusi std::kaarti kasutades insert()
funktsiooni. Pidage meeles, et std::map võtmed peavad olema kordumatud.
Seega kontrollib see esmalt, kas iga võti on kaardil olemas. Kui see on olemas, siis kirjet ei lisata, kuid see tagastab olemasoleva kirje iteraatori. Kui seda pole, sisestatakse kirje.
Funktsioonil on järgmised variatsioonid:
- lisa (paar) – selle variatsiooniga lisatakse kaardile võtme-väärtuse paar.
- insert(algus_itr, end_itr) – selle variatsiooniga sisestatakse kirjed vahemikku, mis on määratud parameetritega start_itr ja end_itr teiselt kaardilt.
. insert_or_assing() funktsioon töötab samamoodi nagu insert()
funktsiooni, kuid kui antud võti on kaardil juba olemas, siis selle väärtust muudetakse.
Näide 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; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone.
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Helistage
main()
funktsiooni. { tähistab funktsiooni keha algust. - Looge kaart nimega m, kus võtmeteks on täisarvud ja väärtusteks täisarvud. Kaardile on tehtud kolm sissekannet.
- Lisa kaardile uus kirje m. Kaardile lisatakse võti 5 ja väärtus 6.
- Püüab sisestada juba olemasolevasse võtmesse. Kuna võti 1 on kaardil juba olemas, siis sisestust ei tehta.
- kasutades
insert_or_assign()
funktsioon olemasoleva kirje sisestamiseks või muutmiseks. Kuna võti 1 on juba olemas, muudetakse selle väärtuseks 6. - Printige konsoolile teksti. Märk „\t” loob horisontaalse tühiku, samas kui märk „\n” viib hiirekursori järgmisele reale.
- Kasutama silmuse jaoks iteraatori loomiseks nimega itr, et itereerida üle kaardi elementide nimega m.
- Printige konsoolile kaardi m väärtused. Märk “\t” loob horisontaalse tühiku iga klahvi ja sellele vastava väärtuse vahele. Seevastu märk „\n” viib hiirekursori pärast iga iteratsiooni järgmisele reale.
- For silmuse keha lõpp.
- Programm peab pärast edukat lõpetamist tagastama väärtuse.
- Keha lõpp
main()
funktsiooni.
Otsing kaardil
Me saame kasutada find()
funktsioon kaardil elementide otsimiseks nende klahvide järgi. Kui võtit ei leita, tagastab funktsioon std::map::end. Vastasel juhul tagastatakse otsitud elemendi iteraator.
Näide 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'; } }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Kaasake iostreami päisefail meie koodi, et kasutada selle funktsioone ilma vigadeta.
- Kaasake stringi päise fail meie koodi, et kasutada selle funktsioone ilma vigadeta.
- Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone ilma vigadeta.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Helistage
main()
funktsiooni. { märgib keha algustmain()
funktsiooni. - Looge kaart nimega Õpilased, mille võtmeteks on täisarvud ja väärtuste stringid.
- Sisestage väärtused kaardile Õpilased. Võti 200 ja Alice'i väärtus sisestatakse kaardile.
- Sisestage väärtused kaardile Õpilased. Kaardile lisatakse võti 201 ja Johni väärtus.
- Otsige võtmega 201 seotud väärtust.
- Kasutage if-lauset, et kontrollida, kas võtme väärtus on leitud.
- Printige võtme väärtus konsoolil mõne teksti kõrvale.
- Kui-lause põhiosa lõpp.
- Keha lõpp
main()
funktsiooni.
Andmete kustutamine kaardilt
Me saame kasutada erase()
funktsioon väärtuse kaardilt kustutamiseks. Loome lihtsalt iteraatori, mis osutab kustutatavale elemendile. Seejärel suunatakse iteraator erase()
funktsiooni.
Näide 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; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Selle funktsioonide kasutamiseks lisage meie koodi stringi päise fail.
- Kaasake kaardi päise fail meie koodi, et kasutada selle funktsioone.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Helistage
main()
funktsiooni. { märgib keha algustmain()
funktsiooni. - Looge kaart nimega minu_kaart, mille võtmeteks on stringid ja väärtusteks täisarvud.
- Sisesta väärtused kaardile my_map. Kaardile lisatakse lehma võti ja väärtus 1.
- Sisesta väärtused kaardile my_map. Kassi võti ja väärtus 2 lisatakse kaardile.
- Lisage väärtus 3 kaardile my_map lõvi võtmega.
- Looge iteraator, et itereerida kaardil my_map võtmekassi otsimiseks.
- Kustutage element, millele iteraator osutas.
- Kasutage iteraatorit, et itereerida kaardi my_map elemendid algusest lõpuni.
- Printige konsoolil välja kaardi my_map sisu.
- Programm peab pärast edukat lõpetamist tagastama väljundi.
- Keha lõpp
main()
funktsiooni.
kokkuvõte
- Kaart on assotsiatiivne konteiner, mis salvestab üksused kaardistatud kujul.
- Igal kaardil oleval üksusel on võtmeväärtus ja kaardistatud väärtus.
- Kaardil ei saa kaks vastendatud väärtust põhiväärtusi jagada.
- Põhiväärtused aitavad elemente kordumatult sortida ja tuvastada.
- Kaardistatud väärtused aitavad salvestada võtmega seotud sisu.
- C++ kaart salvestab unikaalsed võtmed sorteeritud järjekorras.
- Et töötada C++ kaardil, loome iteraatori elementide kordamiseks.
- Iteraatoriga saame täita selliseid toiminguid nagu kaardil olevate üksuste otsimine ja kustutamine.