Kaart in C++ Standaardsjabloonbibliotheek (STL)
โก Slimme samenvatting
Kaart in C++ is een associatieve container uit de Standard Template Library die elementen opslaat als gesorteerde sleutel-waardeparen, waarbij elke unieke sleutel aan รฉรฉn waarde is gekoppeld en snel opzoeken, invoegen en geordend doorlopen mogelijk maakt.

Wat is Kaart in C++?
In C++Een MAP is een associatieve container die items opslaat in een gemapte vorm. Elk item in de map bestaat uit een sleutelwaarde en een gemapte waarde. Twee gemapte waarden kunnen niet dezelfde sleutelwaarden hebben.
De sleutelwaarden zijn handig voor het sorteren en uniek identificeren van elementen, terwijl de gekoppelde waarden de inhoud opslaan die aan elke sleutel is gekoppeld. De twee kunnen verschillen in type, maar het lidtype combineert ze tot een paar dat beide bevat.
Voordat je code schrijft, is het handig om te weten waarom een โโmap vaak de juiste container is om te gebruiken.
Waarom std::map gebruiken?
Hieronder volgen enkele redenen om een โโkaart te gebruiken:
- std::map slaat alleen unieke sleutels op, gesorteerd op basis van de gekozen sorteercriteria.
- Met behulp van de sleutel is het eenvoudig en snel om naar elementen te zoeken.
- Aan elke sleutel is slechts รฉรฉn element bevestigd.
- std::map kan worden gebruikt als een associatieve array.
- std::map kan worden geรฏmplementeerd met behulp van gebalanceerde binaire bomen.
Om van deze voordelen te profiteren, begin je met de declaratiesyntaxis.
Syntaxis
Gebruik deze syntaxis om std::map te declareren:
std::map<key_datatype, value_datatype>map_name;
- De sleutel_datatype geeft het gegevenstype van de kaartsleutels aan.
- De waarde_datatype geeft het gegevenstype aan van de waarden die overeenkomen met de kaartsleutels.
- De mapnaam is de naam van de kaart.
Bijvoorbeeld:
map<string, int> my_map;
We hebben een map met de naam my_map gedeclareerd. De sleutel van de map zal van het gegevenstype string zijn en de waarden van het gegevenstype integer.
Soorten leden
De lidfuncties kunnen de volgende lidtypen gebruiken als parameters of als retourtype:
- sleutel type: Sleutel (de eerste parameter in de sjabloon)
- toegewezen_type: T (de tweede parameter in de sjabloon)
- key_compare: Vergelijk (de derde parameter in de sjabloon)
- allocator_type: Toewijzen (de vierde parameter in de sjabloon)
- waarde type: paar
- waarde_vergelijk: Geneste functieklasse voor het vergelijken van elementen
- referentie: allocator_type::referentie
- const_referentie: allocator_type::const_referentie
- wijzer: allocator_type::wijzer
- const_pointer: allocator_type::const_pointer
- iterator: een bidirectionele iterator voor het waarde_type
- const_iterator: een bidirectionele iterator voor de const waarde_type
- omgekeerde_iterator: een omgekeerde iterator
- const_reverse_iterator: een constante omgekeerde iterator
- verschiltype: ptrdiff_t
- maat_type: maat_t
Ingebouwde functies van std::map
std::map wordt geleverd met ingebouwde functies. Sommige hiervan omvatten:
- beginnen () Deze functie retourneert de iterator naar het eerste item van de map.
- grootte() Deze functie retourneert het aantal items in een map.
- leeg() Deze functie retourneert een Booleaanse waarde die aangeeft of een map leeg is.
- invoegen(paar(sleutel, waarde)) Deze functie voegt een nieuw sleutel-waardepaar toe aan een map.
- vind(waarde) โ Deze functie geeft de iterator naar het element val terug als deze gevonden wordt. Anders retourneert de functie m.end().
- wissen(iteratorpositie) Deze functie verwijdert het item op de positie waarnaar de iterator wijst.
- wissen(const g) Deze functie verwijdert de sleutel-waardecombinatie g uit een map.
- Doorzichtig() Deze functie verwijdert alle items uit een kaart.
Nadat de functies zijn gedefinieerd, worden ze in de volgende voorbeelden in de praktijk gebracht, te beginnen met iteratie.
Itereren over kaartelementen
Je kunt de elementen van de kaart doorlopen. We hoeven alleen maar een iterator te maken en die hiervoor te gebruiken. Bijvoorbeeld:
Voorbeeld 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; } }
Output:
Hier is een screenshot van de code:
Code Uitleg:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het string-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main() aan. De { markeert het begin van de hoofdtekst van de functie.
- Maak een kaart met de naam Studenten, waarbij de sleutels gehele getallen zijn en de waarden tekenreeksen.
- Waarden invoegen in de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
- Waarden invoegen in de kaart Studenten. Een sleutel van 201 en een waarde van John worden in de kaart ingevoegd.
- Gebruik de functie `size()` om de grootte van de kaart met de naam 'Students' te verkrijgen. Dit zou een 2 moeten retourneren.
- Druk wat tekst af op de console.
- Gebruik een for-lus om een โโiterator te maken met de naam Studenten, om de elementen van de kaart met de naam Studenten te doorlopen.
- Print de waarden van de kaart Studenten op de console.
- Einde van de hoofdtekst van de for-lus.
- Einde van de hoofdtekst van de functie main().
Gegevens invoegen in std::map
Je kunt items aan een `std::map` toevoegen met de functie `insert()`. Vergeet niet dat de sleutels in een `std::map` uniek moeten zijn.
Het controleert dus eerst of elke sleutel in de map aanwezig is. Als deze aanwezig is, wordt het item niet ingevoegd, maar wordt de iterator voor het bestaande item geretourneerd. Als deze niet aanwezig is, wordt het item ingevoegd.
De functie kent de volgende variaties:
- invoegen(paar) โ Bij deze variant wordt een sleutel-waardepaar in de kaart ingevoegd.
- invoegen(start_itr, end_itr) โ Bij deze variant worden de gegevens ingevoegd binnen het bereik dat is gedefinieerd door start_itr en end_itr uit een andere kaart.
De functie insert_or_assign() werkt op dezelfde manier als de functie insert(), maar als de opgegeven sleutel al in de map bestaat, wordt de waarde ervan aangepast.
Voorbeeld 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; }
Output:
Hier is een screenshot van de code:
Code Uitleg:
- Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken.
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main() aan. De { markeert het begin van de hoofdtekst van de functie.
- Maak een kaart met de naam m, waarbij de sleutels gehele getallen zijn en de waarden gehele getallen zijn. Er zijn drie vermeldingen op de kaart aangebracht.
- Voeg een nieuw item in de kaart in m. Een sleutel van 5 en een waarde van 6 worden in de kaart ingevoegd.
- Er wordt geprobeerd een invoer te maken in een reeds bestaande sleutel. Omdat sleutel 1 al op de kaart bestaat, wordt de invoer niet uitgevoerd.
- De functie insert_or_assign() gebruiken om een โโbestaande invoer in te voegen of te wijzigen. Omdat de sleutel 1 al bestaat, wordt de waarde ervan gewijzigd in 6.
- Druk wat tekst af op de console. Het teken โ\tโ creรซert een horizontale spatie, terwijl het teken โ\nโ de muiscursor naar de volgende regel verplaatst.
- Gebruik een for loop om een โโiterator met de naam itr te maken om de elementen van de kaart met de naam m te herhalen.
- Druk de waarden van de kaart m af op de console. Het teken โ\tโ creรซert een horizontale spatie tussen elke toets en de bijbehorende waarde. Het teken โ\nโ daarentegen verplaatst de muiscursor na elke iteratie naar de volgende regel.
- Einde van de hoofdtekst van de for-lus.
- Het programma moet bij succesvolle voltooiing een waarde retourneren.
- Einde van de hoofdtekst van de functie main().
Zoeken op een kaart
We kunnen de `find()`-functie gebruiken om elementen in een map te zoeken op basis van hun sleutels. Als de sleutel niet wordt gevonden, retourneert de functie `std::map::end`. Anders wordt een iterator van het gezochte element geretourneerd.
Voorbeeld 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'; } }
Output:
Hier is een screenshot van de code:
Code Uitleg:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
- Neem het string-headerbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
- Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main() aan. De { markeert het begin van de body van de functie main().
- Maak een kaart met de naam Studenten, waarvan de sleutels gehele getallen en waardenreeksen zijn.
- Waarden invoegen in de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
- Waarden invoegen in de kaart Studenten. Een sleutel van 201 en een waarde van John worden in de kaart ingevoegd.
- Zoek naar de waarde die is gekoppeld aan een sleutel van 201.
- Gebruik een if-statement om te controleren of de waarde voor de sleutel wordt gevonden.
- Druk de waarde van de sleutel af naast wat tekst op de console.
- Einde van de hoofdtekst van de if-instructie.
- Einde van de hoofdtekst van de functie main().
Gegevens van een kaart verwijderen
We kunnen de functie `erase()` gebruiken om een โโwaarde uit een map te verwijderen. We maken simpelweg een iterator aan die naar het te verwijderen element wijst. Deze iterator wordt vervolgens doorgegeven aan de functie `erase()`.
Voorbeeld 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; }
Output:
Hier is een screenshot van de code:
Code Uitleg:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het string-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main() aan. De { markeert het begin van de body van de functie main().
- Maak een kaart met de naam my_map, waarvan de sleutels strings en gehele waarden zijn.
- Voeg waarden in de kaart my_map in. Een sleutel Koe en een waarde van 1 worden in de kaart ingevoegd.
- Voeg waarden in de kaart my_map in. Een sleutel van Cat en een waarde van 2 worden in de kaart ingevoegd.
- Voeg een waarde 3 toe aan de kaart my_map met een sleutel van een leeuw.
- Maak een iterator om de kaart my_map te doorlopen op zoek naar de sleutelkat.
- Verwijder het element waarnaar de iterator verwijst.
- Gebruik een iterator om de elementen van de map my_map van begin tot eind te doorlopen.
- Druk de inhoud van de kaart my_map op de console af.
- Het programma moet uitvoer retourneren na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main().






