std::map in C++ meistern: Umfassender Guide mit Code‑Beispielen
Was ist std::map?
In der C++ Standard Template Library (STL) ist std::map ein assoziativer Container, der Elemente als Schlüssel‑Wert‑Paare speichert. Jeder Schlüssel ist einzigartig, und der Container hält die Elemente automatisch sortiert gemäß der Vergleichsfunktion des Schlüssels (Standard: std::less). Die Werte können beliebige Typen haben und werden über ihre Schlüssel adressiert.
Warum std::map nutzen?
- Schlüssel sind einzigartig und sortiert → schnelle Lookups (
O(log n)). - Ideal für Szenarien, die ein assoziatives Array / Dictionary mit garantierter Reihenfolge benötigen.
- Intern als balancierter binärer Suchbaum (Rot‑Schwarz‑Baum) implementiert → zuverlässige Performance bei allen Operationen.
- Unterstützt schnelles Einfügen, Löschen und Durchlaufen.
- Reiche API, die nahtlos mit Iteratoren und STL‑Algorithmen zusammenarbeitet.
Syntax
Map deklarieren mit:
std::map<KeyType, ValueType> mapName;
KeyType– Typ des Schlüssels (muss vergleichbar sein).ValueType– Typ des zugehörigen Werts.mapName– Variablenname.
Beispiel:
std::map<std::string, int> ageMap;
Member‑Typen
- key_type: Typ der Schlüssel.
- mapped_type: Typ der Werte.
- value_type:
std::pair<const key_type, mapped_type> - iterator: Bidirektionaler Iterator über
value_type. - const_iterator, reverse_iterator, const_reverse_iterator
- size_type, difference_type
Eingebaute Funktionen
begin()– Iterator auf erstes Element.end()– Past‑the‑end Iterator.size()– Elementanzahl.empty()– Ob Map leer ist.insert()– Schlüssel/Wert‑Paar hinzufügen.find()– Element per Schlüssel suchen.erase()– Elemente per Iterator oder Schlüssel entfernen.clear()– Alle Elemente entfernen.- Weitere Utilities wie
count()undlower_bound().
Über Map‑Elemente iterieren
Iteratoren geben volle Kontrolle über die Durchlaufreihenfolge, die immer nach Schlüssel sortiert ist.
#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 << "Standard‑Map‑Reihenfolge:" << endl;
for (auto it = students.begin(); it != students.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
return 0;
}
Ausgabe:

Daten in std::map einfügen
Verwenden Sie insert() für neue Einträge; Duplikate werden stillschweigend ignoriert. Um einen bestehenden Schlüssel zu überschreiben, nutzen Sie 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}); // fügt neues Paar ein
m.insert({1,8}); // ignoriert, Key 1 existiert bereits
m.insert_or_assign(1,6); // aktualisiert Key 1 auf Wert 6
cout << "Key\tElement\n";
for (auto& p : m) {
cout << p.first << '\t' << p.second << '\n';
}
return 0;
}
Ausgabe:

In einer Map suchen
Das Finden eines Schlüssels ist mit find() einfach. Existiert der Schlüssel, zeigt der zurückgegebene Iterator auf das Element; andernfalls wird end() zurückgegeben.
#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 hat Wert: " << it->second << endl;
}
return 0;
}
Ausgabe:

Daten aus einer Map löschen
Elemente können per Schlüssel oder per Iterator entfernt werden. erase() invalidiert nur Iteratoren, die auf das gelöschte Element zeigen.
#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;
}
Ausgabe:

Zusammenfassung
std::mapist ein sortierter assoziativer Container mit einzigartigen Schlüsseln.- Schlüssel ermöglichen effiziente Lookups; Werte halten die zugehörigen Daten.
- Alle Kernoperationen laufen in logarithmischer Zeit dank Rot‑Schwarz‑Baum.
- Iteratoren erlauben Durchlauf, Einfügen, Löschen und Bereichsabfragen.
- Mit
insert_or_assign()ist Aktualisieren einfach. find()für schnelle Existenzprüfungen und direkten Zugriff nutzen.- Löschoperationen können einzelne Elemente oder die gesamte Map leeren.
C Sprache
- C-Standardbibliothek-Funktionen meistern: Praxisleitfaden
- C++ Operatoren erklärt: Typen, Beispiele und Beispielprogramme
- C++ do‑while‑Schleife: Syntax, Praxisbeispiele und verschachtelte Schleifen
- C++ switch‑case meistern: Syntax, Einsatz und Praxisbeispiele
- C++ Dynamische Array‑Allokation: Praktischer Leitfaden mit Code‑Beispielen
- C++ Zeiger meistern: Konzepte, Beispiele & praktische Anwendungen
- C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
- std::list in C++ meistern: Syntax, Funktionen & praktische Beispiele
- C++-Funktionen erklärt: Mit praktischen Code-Beispielen
- C++ Struct vs. Class: Wichtige Unterschiede, Syntax und beste Anwendungsfälle