std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden
Wat is std::map?
In de C++ Standard Template Library (STL) is std::map een associatieve container die elementen opslaat als sleutel‑waarde‑paren. Elke sleutel is uniek en de container houdt de elementen automatisch gesorteerd volgens de vergelijkingsfunctie van de sleutel (standaard std::less). De waarden kunnen van elk type zijn en worden benaderd via hun bijbehorende sleutels.
Waarom std::map Gebruiken?
- Sleutels zijn uniek en gesorteerd opgeslagen, wat snelle lookup‑operaties mogelijk maakt (
O(log n)). - Ideaal voor scenario's die een associatieve array of dictionary met gegarandeerde ordening vereisen.
- Intern geïmplementeerd als een gebalanceerde binaire zoekboom (red‑black tree), wat betrouwbare prestaties bij alle operaties garandeert.
- Ondersteunt snelle invoeging, verwijdering en traversie.
- Rijke API die naadloos integreert met iterators en STL‑algoritmes.
Syntaxis
Declareer een map met:
std::map<KeyType, ValueType> mapNaam;
KeyType– het type van de sleutel (moet vergelijkbaar zijn).ValueType– het type van de gemapte waarde.mapNaam– de variabelenaam.
Voorbeeld:
std::map<std::string, int> ageMap;
Member Types
- key_type: Type van de sleutels.
- mapped_type: Type van de gemapte waarden.
- value_type:
std::pair<const key_type, mapped_type> - iterator: Bidirectionele iterator over
value_type. - const_iterator, reverse_iterator, const_reverse_iterator
- size_type, difference_type
Ingebouwde Functies
begin()– iterator naar eerste element.end()– past‑the‑end iterator.size()– aantal elementen.empty()– of de map leeg is.insert()– voeg een sleutel/waarde‑paar toe.find()– zoek een element op sleutel.erase()– verwijder elementen via iterator of sleutel.clear()– verwijder alle elementen.- Overige hulpfuncties zoals
count()enlower_bound()zijn ook beschikbaar.
Itereren over Map‑Elementen
Iterators geven je volledige controle over traversie‑volgorde, die altijd gesorteerd is op sleutel.
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
map<int, string> students;
students.insert({200, "Alice"});
students.insert({201, "John"});
cout << "Map size is: " << students.size() << endl;
cout << endl << "Default map order:" << endl;
for (auto it = students.begin(); it != students.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
return 0;
}
Output:

Data Invoegen in std::map
Gebruik insert() voor nieuwe entries; het weigert stilletjes duplicaten. Om een bestaande sleutel te overschrijven, gebruik insert_or_assign().
#include <map>
#include <iostream>
using namespace std;
int main() {
map<int, int> m{{1,3},{2,4},{3,5}};
m.insert({5,6}); // voegt nieuw paar toe
m.insert({1,8}); // genegeerd, sleutel 1 bestaat al
m.insert_or_assign(1,6); // werkt sleutel 1 bij naar waarde 6
cout << "Key\tElement\n";
for (auto& p : m) {
cout << p.first << '\t' << p.second << '\n';
}
return 0;
}
Output:

Zoeken in een Map
Het vinden van een sleutel is eenvoudig met find(). Als de sleutel bestaat, wijst de geretourneerde iterator naar het element; anders wordt end() teruggegeven.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, string> students;
students.insert({200, "Alice"});
students.insert({201, "John"});
if (auto it = students.find(201); it != students.end()) {
cout << "Key 201 has value: " << it->second << endl;
}
return 0;
}
Output:

Data Verwijderen uit een Map
Elementen kunnen verwijderd worden via sleutel of via iterator. De erase()-methode invalideert alleen iterators die naar het gewiste element wijzen.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> myMap;
myMap["cow"] = 1;
myMap["cat"] = 2;
myMap["lion"] = 3;
if (auto it = myMap.find("cat"); it != myMap.end()) {
myMap.erase(it);
}
for (auto& p : myMap) {
cout << p.first << ": " << p.second << endl;
}
return 0;
}
Output:

Samenvatting
std::mapis een gesorteerde associatieve container met unieke sleutels.- Sleutels bieden efficiënte lookup; waarden houden de geassocieerde data.
- Alle kernoperaties draaien in logaritmische tijd door de onderliggende red‑black tree.
- Iterators maken traversie, invoeging, verwijdering en range‑queries mogelijk.
- Met
insert_or_assign()is het bijwerken van waarden eenvoudig. - Gebruik
find()voor snelle existentie‑checks en directe toegang. - Erase‑operaties kunnen individuele elementen of de hele map wissen.
C Taal
- C Standaardbibliotheek-functies onder de knie krijgen: Een praktische gids
- C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
- C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
- C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
- C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
- C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
- C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden
- C++ Structs Uitgelegd met een Praktisch Voorbeeld
- Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
- C++ Functies Uitgelegd met Praktische Codevoorbeelden
- C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties