Kaart sisse C++ Standardmalliteek (STL)
โก Nutikas kokkuvรตte
Kaart sisse C++ on standardmallide teegi assotsiatiivne konteiner, mis salvestab elemente sorteeritud vรตtme-vรครคrtuse paaridena, kus iga unikaalne vรตti vastab รผhele vรครคrtusele ning vรตimaldab kiiret otsingut, sisestamist ja jรคrjestatud lรคbimist.

Milles on kaart C++?
In C++, MAP on assotsiatiivne konteiner, mis salvestab elemente kaardistatud kujul. Iga kaardi element koosneb vรตtmevรครคrtusest ja kaardistatud vรครคrtusest. Kahel kaardistatud vรครคrtusel ei saa olla samu vรตtmevรครคrtusi.
Vรตtmevรครคrtused on kasulikud elementide sortimiseks ja unikaalseks tuvastamiseks, samas kui kaardistatud vรครคrtused salvestavad iga vรตtmega seotud sisu. Need kaks vรตivad tรผรผbi poolest erineda, kuid liikmetรผรผp รผhendab need paariks, mis sisaldab mรตlemat.
Enne mis tahes koodi kirjutamist on kasulik teada, miks kaart on sageli รตige konteiner, mille poole haarata.
Miks kasutada std::map?
Kaardi kasutamise pรตhjused on jรคrgmised:
- std::map salvestab ainult unikaalseid vรตtmeid, sorteeritud jรคrjekorras vastavalt valitud sortimiskriteeriumidele.
- Vรตtme abil on elementide otsimine lihtne ja kiire.
- Igale vรตtmele on kinnitatud ainult รผks element.
- std::map saab kasutada assotsiatiivse massiivina.
- std::map on rakendatav tasakaalustatud binaarpuude abil.
Nende eeliste kasutamiseks alustage deklaratsiooni sรผntaksiga.
Sรผntaks
Std::map deklareerimiseks kasutage jรคrgmist sรผntaksit:
std::map<key_datatype, value_datatype>map_name;
- . vรตtme_andmetรผรผp tรคhistab kaardivรตtmete andmetรผรผpi.
- . vรครคrtuse_andmetรผรผp tรคhistab kaardivรตtmetele vastavate vรครคrtuste andmetรผรผpi.
- . kaardi_nimi on kaardi nimi.
Nรคiteks:
map<string, int> my_map;
Me deklareerisime kaardi nimega my_map. Kaardil on vรตtme andmetรผรผbiks string ja vรครคrtuste andmetรผรผbiks tรคisarv.
Liikmete tรผรผbid
Liikmesfunktsioonid saavad parameetrite vรตi tagastustรผรผbina kasutada jรคrgmisi liikmetรผรผpe:
- key_type: Vรตti (malli esimene parameeter)
- mapped_type: T (malli teine โโparameeter)
- 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:
- algama () โ See funktsioon tagastab iteraatori kaardi esimesele elemendile.
- suurus () โ See funktsioon tagastab kaardil olevate elementide 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.
- leid(vรครคrtus) โ See funktsioon annab elemendile val iteraatori, kui see leitakse. Vastasel juhul tagastab see m.end().
- kustutada(iteraatori positsioon) โ See funktsioon kustutab iteraatori poolt osutatud positsioonilt pรคrit elemendi.
- kustuta (konst g) โ See funktsioon kustutab kaardilt vรตtme-vรครคrtuse g.
- selge () โ See funktsioon kustutab kaardilt kรตik elemendid.
Kui funktsioonid on defineeritud, rakendavad jรคrgmised nรคited neid, alustades iteratsioonist.
Itereerimine รผle kaardielementide
Saate kaardi elemente itereerida. Peame lihtsalt looma iteraatori ja seda selleks kasutama. Nรคiteks:
Nรคiteks 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:
Code 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.
- Kutsuge funktsioon main(). { 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 funktsiooni size(), et saada kaardi nimega Students suurus. See peaks tagastama vรครคrtuse 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.
- Funktsiooni main() keha lรตpp.
Andmete sisestamine kausta std::map
Saate elemente std::map-i sisestada funktsiooni insert() abil. Pidage meeles, et std::map vรตtmed peavad olema unikaalsed.
Seega kontrollib see kรตigepealt, kas iga vรตti on kaardil olemas. Kui see on olemas, siis kirjet ei lisata, vaid tagastatakse olemasoleva kirje iteraator. Kui seda pole, siis kirje lisatakse.
Funktsioonil on jรคrgmised variatsioonid:
- sisesta(paar) โ selle variatsiooni korral lisatakse kaardile vรตtme-vรครคrtuse paar.
- sisesta(algus_vรครคrtus, lรตpp_vรครคrtus) โ selle variatsiooni korral lisatakse kirjed teiselt kaardilt start_itr ja end_itr poolt mรครคratud vahemikku.
Funktsioon insert_or_assign() tรถรถtab samamoodi nagu funktsioon insert(), aga kui antud vรตti on kaardil juba olemas, siis selle vรครคrtust muudetakse.
Nรคiteks 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:
Code 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.
- Kutsuge funktsioon main(). { 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.
- Funktsiooni insert_or_assign() kasutamine olemasoleva kirje lisamiseks vรตi muutmiseks. Kuna vรตti 1 on juba olemas, muudetakse selle vรครคrtus 6-ks.
- 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.
- Funktsiooni main() keha lรตpp.
Otsing kaardil
Funktsiooni find() abil saame otsida kaardil elemente nende vรตtmete jรคrgi. Kui vรตtit ei leita, tagastab funktsioon vรครคrtuse std::map::end. Vastasel juhul tagastatakse otsitava elemendi iteraator.
Nรคiteks 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:
Code 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.
- Kutsu vรคlja funktsiooni main(). Mรคrk { tรคhistab funktsiooni main() sisu algust.
- 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.
- Funktsiooni main() keha lรตpp.
Andmete kustutamine kaardilt
Vรครคrtuse kaardilt kustutamiseks saame kasutada funktsiooni erase(). Me lihtsalt loome iteraatori, mis osutab kustutatavale elemendile. Seejรคrel edastatakse iteraator funktsioonile erase().
Nรคiteks 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:
Code 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.
- Kutsu vรคlja funktsiooni main(). Mรคrk { tรคhistab funktsiooni main() sisu algust.
- 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 elemente algusest lรตpuni.
- Printige konsoolil vรคlja kaardi my_map sisu.
- Programm peab pรคrast edukat lรตpetamist tagastama vรคljundi.
- Funktsiooni main() keha lรตpp.






