Kartta sisään C++ Standard Template Library (STL)
⚡ Älykäs yhteenveto
Kartta sisään C++ on Standard Template Libraryn assosiatiivinen säilö, joka tallentaa elementit lajiteltuina avain-arvo-pareina, joissa jokainen yksilöllinen avain vastaa yhtä arvoa ja mahdollistaa nopean haun, lisäyksen ja järjestetyn läpikäymisen.

Mitä kartta sisältää C++?
In C++, MAP on assosiatiivinen säilö, joka tallentaa kohteita kartoitetussa muodossa. Jokainen kartan kohde koostuu avainarvosta ja kartoitetusta arvosta. Kahdella kartoitetulla arvolla ei voi olla samoja avainarvoja.
Avainten arvot ovat hyödyllisiä elementtien lajitteluun ja yksilölliseen tunnistamiseen, kun taas kartoitetut arvot tallentavat kuhunkin avaimeen liittyvän sisällön. Nämä kaksi voivat erota tyypiltään, mutta jäsentyyppi yhdistää ne pariksi, joka sisältää molemmat.
Ennen minkään koodin kirjoittamista on hyödyllistä tietää, miksi kartta on usein oikea säiliö, johon kannattaa tarttua.
Miksi käyttää std::map?
Tässä on syitä kartan käyttöön:
- std::map tallentaa vain yksilölliset avaimet lajiteltuna valittujen lajittelukriteerien perusteella.
- Avaimen avulla elementtien etsiminen on helppoa ja nopeaa.
- Jokaiseen avaimeen on kiinnitetty vain yksi elementti.
- std::map voidaan käyttää assosiatiivisena taulukkona.
- std::map on toteutettavissa tasapainotettujen binääripuiden avulla.
Näiden etujen hyödyntämiseksi aloita deklaraatiosyntaksilla.
Syntaksi
Ilmoita std::map käyttämällä tätä syntaksia:
std::map<key_datatype, value_datatype>map_name;
- avaintietotyyppi tarkoittaa karttaavainten tietotyyppiä.
- arvotietotyyppi tarkoittaa karttaavaimia vastaavien arvojen tietotyyppiä.
- kartan_nimi on kartan nimi.
Esimerkiksi:
map<string, int> my_map;
Esittelimme kartan nimeltä my_map. Kartan avaintietotyyppi on merkkijono ja arvotietotyyppi kokonaisluku.
Jäsentyypit
Jäsenfunktiot voivat käyttää seuraavia jäsentyyppejä joko parametreina tai paluutyyppinä:
- key_type: Avain (mallin ensimmäinen parametri)
- mapped_type: T (mallin toinen parametri)
- key_compare: Vertaa (mallin kolmas parametri)
- allocator_type: Alloc (mallin neljäs parametri)
- arvon tyyppi: pari
- value_compare: Sisäkkäinen funktioluokka elementtien vertailua varten
- viite: allokaattorin_tyyppi::viite
- const_reference: allocator_type::const_reference
- osoitin: allokaattorin_tyyppi::osoitin
- const_pointer: allocator_type::const_pointer
- iteraattori: arvo_tyypin kaksisuuntainen iteraattori
- const_iterator: kaksisuuntainen iteraattori arvoon const value_type
- reverse_iterator: käänteinen iteraattori
- const_reverse_iterator: jatkuva käänteinen iteraattori
- different_type: ptrdiff_t
- Koko Tyyppi: int
std::map:n sisäänrakennetut toiminnot
std::map sisältää sisäänrakennetut toiminnot. Jotkut näistä sisältävät:
- alkaa () – Tämä funktio palauttaa iteraattorin kartan ensimmäiseen alkioon.
- koko() – Tämä funktio palauttaa kartalla olevien kohteiden määrän.
- tyhjä() – Tämä funktio palauttaa totuusarvon, joka ilmaisee, onko kartta tyhjä.
- insert(pair(avain, arvo)) – Tämä funktio lisää uuden avain-arvo-parin karttaan.
- etsi(arvo) – Tämä funktio antaa iteraattorin val-elementille, jos sellainen löytyy. Muussa tapauksessa se palauttaa m.end().
- pyyhi (iteraattorin sijainti) – Tämä funktio poistaa alkion iteraattorin osoittamasta kohdasta.
- pyyhkiä (jatkuu g) – Tämä funktio poistaa avain-arvon g kartalta.
- asia selvä() – Tämä funktio poistaa kaikki kohteet kartalta.
Kun funktiot on määritelty, seuraavat esimerkit ottavat ne käyttöön iteroinnilla aloittaen.
Iterointi karttaelementtien kautta
Voit iteroida karttaelementtien läpi. Meidän tarvitsee vain luoda iteraattori ja käyttää sitä tähän tarkoitukseen. Esimerkiksi:
Esimerkki 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; } }
lähtö:
Tässä on kuvakaappaus koodista:
Code Selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä merkkijonootsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä karttaotsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. { merkitsee funktion rungon alkua.
- Luo kartta nimeltä Opiskelijat, jossa avaimet ovat kokonaislukuja ja arvot merkkijonoja.
- Lisää arvot karttaan Opiskelijat. Avain 200 ja Alice-arvo lisätään karttaan.
- Lisää arvot karttaan Opiskelijat. Avain 201 ja Johnin arvo lisätään karttaan.
- Käytä size()-funktiota saadaksesi Opiskelijat-nimisen kartan koon. Tämän pitäisi palauttaa arvo 2.
- Tulosta tekstiä konsoliin.
- Käytä for-silmukkaa luodaksesi iteraattorin nimeltä se iteroimaan kartan elementtejä nimeltä Opiskelijat.
- Tulosta kartan Opiskelijat-arvot konsoliin.
- For-silmukan rungon loppu.
- Main()-funktion rungon loppu.
Lisätään tietoja std::karttaan
Voit syöttää kohteita std::map-funktioon insert()-funktiolla. Muista, että std::map-avainten on oltava yksilöllisiä.
Joten se tarkistaa ensin, onko kutakin avainta kartalla. Jos avain on, merkintää ei lisätä, mutta se palauttaa olemassa olevan merkinnän iteraattorin. Jos sitä ei ole, merkintä lisätään.
Funktiolla on seuraavat muunnelmat:
- lisää(pari) – tässä muunnelmassa avain-arvo-pari lisätään karttaan.
- lisää(aloitus_arvo, loppu_arvo) – tässä muunnelmassa merkinnät lisätään start_itr- ja end_itr-muuttujien määrittämälle alueelle toisesta kartasta.
insert_or_assign()-funktio toimii samalla tavalla kuin insert()-funktio, mutta jos annettu avain on jo olemassa kartassa, sen arvoa muutetaan.
Esimerkki 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; }
lähtö:
Tässä on kuvakaappaus koodista:
Code Selitys:
- Sisällytä karttaotsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. { merkitsee funktion rungon alkua.
- Luo kartta nimeltä m, jossa avaimet ovat kokonaislukuja ja arvot ovat kokonaislukuja. Karttaan on tehty kolme merkintää.
- Lisää karttaan uusi merkintä m. Avain 5 ja arvo 6 lisätään karttaan.
- Yritetään tehdä syöttöä jo olemassa olevaan avaimeen. Koska avain 1 on jo olemassa kartassa, syöttöä ei tehdä.
- Käytetään insert_or_assign()-funktiota olemassa olevan merkinnän lisäämiseen tai muokkaamiseen. Koska avain 1 on jo olemassa, sen arvoksi muutetaan 6.
- Tulosta tekstiä konsoliin. "\t"-merkki luo vaakatilan, kun taas "\n"-merkki siirtää hiiren osoittimen seuraavalle riville.
- Käyttää silmukalle luoda iteraattori nimeltä itr iteroimaan kartan elementtejä nimeltä m.
- Tulosta kartan m arvot konsoliin. "\t"-merkki luo vaakatilan kunkin näppäimen ja sitä vastaavan arvon väliin. Sitä vastoin "\n"-merkki siirtää hiiren kohdistimen seuraavalle riville jokaisen iteroinnin jälkeen.
- For-silmukan rungon loppu.
- Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
- Main()-funktion rungon loppu.
Haku kartalta
Voimme käyttää find()-funktiota etsiäksemme kartan elementtejä niiden avainten perusteella. Jos avainta ei löydy, funktio palauttaa std::map::end-arvon. Muussa tapauksessa palautetaan haetun elementin iteraattori.
Esimerkki 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'; } }
lähtö:
Tässä on kuvakaappaus koodista:
Code Selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja ilman virheitä.
- Sisällytä merkkijonootsikkotiedosto koodiimme käyttääksesi sen toimintoja ilman virheitä.
- Sisällytä karttaotsikkotiedosto koodiimme käyttääksesi sen toimintoja ilman virheitä.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. Merkki { merkitsee main()-funktion rungon alkua.
- Luo kartta nimeltä Opiskelijat, joiden avaimet ovat kokonaislukuja ja arvomerkkijonoja.
- Lisää arvot karttaan Opiskelijat. Avain 200 ja Alice-arvo lisätään karttaan.
- Lisää arvot karttaan Opiskelijat. Avain 201 ja Johnin arvo lisätään karttaan.
- Etsi avaimeen 201 liittyvä arvo.
- Käytä if-lausetta tarkistaaksesi, löytyykö avaimen arvo.
- Tulosta avaimen arvo tekstin rinnalle konsoliin.
- if-lauseen rungon loppu.
- Main()-funktion rungon loppu.
Tietojen poistaminen kartalta
Voimme käyttää erase()-funktiota arvon poistamiseen kartalta. Luomme yksinkertaisesti iteraattorin, joka osoittaa poistettavaan elementtiin. Iteraattori annetaan sitten erase()-funktiolle.
Esimerkki 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; }
lähtö:
Tässä on kuvakaappaus koodista:
Code Selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä merkkijonootsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä karttaotsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. Merkki { merkitsee main()-funktion rungon alkua.
- Luo kartta nimeltä my_map, jonka avaimet ovat merkkijonoja ja arvot kokonaislukuja.
- Lisää arvot karttaan my_map. Lehmän avain ja arvo 1 lisätään karttaan.
- Lisää arvot karttaan my_map. Cat-avain ja arvo 2 lisätään karttaan.
- Lisää karttaan my_map arvo 3 leijonan avaimella.
- Luo iteraattori iteroidaksesi kartalla my_map etsimässä avainkissaa.
- Poista iteraattorin osoittama elementti.
- Käytä iteraattoria iteroidaksesi kartan my_map elementtien läpi alusta loppuun.
- Tulosta kartan my_map sisältö konsolissa.
- Ohjelman on palautettava tulos, kun se on suoritettu onnistuneesti.
- Main()-funktion rungon loppu.






