Kartta sisään C++ Standard Template Library (STL)
Mitä kartta sisältää C++? Syntaksi
In C++, The MAP on assosiatiivinen kontti, joka säilyttää kohteita kartoitetussa muodossa. Jokainen kartan kohde koostuu avainarvosta ja kartoitetusta arvosta. Kahdella kartoitetulla arvolla ei voi olla samoja avainarvoja.
Avainarvot ovat hyviä elementtien lajitteluun ja yksilöimiseen. Yhdistetyt arvot on tarkoitettu avaimeen liittyvän sisällön tallentamiseen. Nämä kaksi voivat erota tyypeittäin, mutta jäsentyyppi yhdistää ne parityypin kautta, joka yhdistää molemmat.
Miksi käyttää std::map?
Tässä syitä kartan käyttöön:
- std:: kartta tallentaa yksilölliset avaimet vain lajiteltuna valittujen lajittelukriteerien perusteella.
- Elementtien etsiminen avaimella on helppoa ja nopeampaa.
- Jokaiseen avaimeen on kiinnitetty vain yksi elementti.
- std::map voidaan käyttää assosiatiivisena taulukkona.
- std::map on toteutettavissa käyttämällä binääripuita (balansoitu).
Syntaksi
Ilmoita std::map käyttämällä tätä syntaksia:
std::map<key_datatype, value_datatype>map_name;
- -
key_datatype
tarkoittaa karttaavainten tietotyyppiä. - -
value_datatype
tarkoittaa karttaavaimia vastaavien arvojen tietotyyppiä. - -
map_name
on kartan nimi.
Esimerkiksi:
map<string, int> my_map;
Ilmoitimme kartan nimeltä my_map
. Kartalla on merkkijono as avain tietotyypit ja kokonaisluku as arvot tietotyyppi.
Jäsentyypit
Jäsenfunktiot voivat käyttää seuraavia jäsentyyppejä joko parametreina tai palautustyypeinä:
- 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ä toiminto palauttaa iteraattorin kartan ensimmäiseen kohtaan.
- koko() -Tämä funktio palauttaa kartan kohteiden määrän.
- tyhjä() -Tämä funktio palauttaa Boolen arvon, joka ilmaisee, onko kartta tyhjä.
- insert( pari(avain, arvo)) – Tämä toiminto lisää karttaan uuden avain-arvo-parin.
- löytää(val) – Tämä funktio antaa iteraattorin val-elementille, jos se löytyy. Muussa tapauksessa se palauttaa m.end().
- Pyyhi (iteraattorin sijainti) – Tämä toiminto poistaa kohteen iteraattorin osoittamasta kohdasta.
- pyyhkiä (jatkuu g) – Tämä toiminto poistaa avainarvon g kartalta.
- Asia selvä () -Tämä toiminto poistaa kaikki kohteet kartalta.
Iterointi karttaelementtien kautta
Voit iteroida karttaelementtien yli. Meidän täytyy vain luoda iteraattori ja käyttää sitä tähän.
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:
Koodin 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ä.
- Soita
main()
toiminto. { 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()
toiminto saadaksesi Opiskelijat-nimisen kartan koon. Tämän pitäisi palauttaa 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.
- Rungon loppu
main()
toiminto.
Lisätään tietoja std::karttaan
Voit syöttää kohteita std::karttaan käyttämällä insert()
toiminto. Muista, että std::map-avainten on oltava yksilöllisiä.
Joten se tarkistaa ensin, onko jokainen avain mukana kartassa. Jos se on olemassa, merkintää ei lisätä, mutta se palauttaa olemassa olevan merkinnän iteraattorin. Jos sitä ei ole, merkintä lisätään.
Funktiolla on seuraavat muunnelmat:
- insert (pari) – tällä muunnelmalla avain-arvo-pari lisätään karttaan.
- insert(aloitus_itr, end_itr) – tällä muunnelmalla merkinnät lisätään toisesta kartasta alku_itr:n ja end_itr:n määrittämälle alueelle.
- insert_or_assing() toiminto 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:
Koodin 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ä.
- Soita
main()
toiminto. { 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äyttäen
insert_or_assign()
toiminto lisätäksesi tai muokataksesi olemassa olevaa merkintää. 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.
- Rungon loppu
main()
toiminto.
Haku kartalta
Voimme käyttää find()
toiminto, joka etsii kartan elementtejä niiden näppäimillä. Jos avainta ei löydy, funktio palauttaa std::map::end. 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:
Koodin 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ä.
- Soita
main()
toiminto. { merkitsee rungon alkuamain()
toiminto. - 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.
- Rungon loppu
main()
toiminto.
Tietojen poistaminen kartalta
Voimme käyttää erase()
toiminto poistaaksesi arvon kartalta. Luomme yksinkertaisesti iteraattorin, joka osoittaa poistettavaan elementtiin. Iteraattori siirretään sitten tiedostoon erase()
toiminto.
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:
Koodin 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ä.
- Soita
main()
toiminto. { merkitsee tekstin rungon alkuamain()
toiminto. - 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 elementtejä alusta loppuun.
- Tulosta kartan my_map sisältö konsolissa.
- Ohjelman on palautettava tulos, kun se on suoritettu onnistuneesti.
- Rungon loppu
main()
toiminto.
Yhteenveto
- Kartta on assosiatiivinen säilö, joka tallentaa kohteet kartoitetussa muodossa.
- Jokaisella kartan kohteella on avainarvo ja kartoitettu arvo.
- Kartassa kaksi kartoitettua arvoa ei voi jakaa avainarvoja.
- Avainarvot auttavat lajittelemaan ja tunnistamaan elementtejä yksilöllisesti.
- Yhdistetyt arvot auttavat tallentamaan avaimeen liittyvää sisältöä.
- C++ kartta tallentaa yksilölliset avaimet lajiteltuna.
- Työskennellä jonkun kanssa C++ karttaa, luomme iteraattorin elementtien iteroimiseksi.
- Iteraattorin avulla voimme suorittaa tehtäviä, kuten etsiä ja poistaa kohteita kartalta.