std::map
Geordnete Schlüssel-Wert-Speicherung
std::map ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist std::map?
std::map speichert nach Schlüssel sortierte Schlüssel-Wert-Paare. Jeder Schlüssel ist eindeutig, und Suchen, Einfügen sowie Löschen erfolgen in logarithmischer Zeit.
- Die Schlüssel werden in sortierter Reihenfolge gehalten.
- Als Grundlage dient ein balancierter binärer Suchbaum.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << "Alice is " << ages["Alice"] << '\n';
return 0;
}Elemente einfügen
Sie können mit operator[], insert() oder emplace() einfügen. Die Verwendung von [] für einen fehlenden Schlüssel legt ihn mit einem Standardwert an.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m;
m["one"] = 1;
m.insert({"two", 2});
m.emplace("three", 3);
std::cout << m.size() << " entries\n";
return 0;
}Sortiertes Iterieren
Beim Iterieren über eine std::map werden die Schlüssel in aufsteigender Reihenfolge besucht. Jedes Element ist ein std::pair mit .first (Schlüssel) und .second (Wert).
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"banana", 3}, {"apple", 5}, {"cherry", 1}};
for (const auto& p : m) {
std::cout << p.first << " = " << p.second << '\n';
}
return 0;
}Schlüssel finden
Verwenden Sie find(), um sicher nach einem Schlüssel zu suchen. Die Funktion gibt einen Iterator auf das Element zurück oder end(), wenn es nicht gefunden wurde.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"x", 10}, {"y", 20}};
auto it = m.find("y");
if (it != m.end()) {
std::cout << "Found y = " << it->second << '\n';
} else {
std::cout << "Not found\n";
}
return 0;
}Vorhandensein prüfen
Um zu prüfen, ob ein Schlüssel vorhanden ist, ohne ihn anzulegen, verwenden Sie count() (gibt 0 oder 1 zurück) oder in C++20 contains().
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}};
std::cout << m.count("a") << '\n';
std::cout << m.count("z") << '\n';
return 0;
}Werte aktualisieren
Durch erneute Zuweisung zu einem Schlüssel wird sein Wert direkt aktualisiert. Die Map behält nur einen Wert pro Schlüssel.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> score;
score["player"] = 10;
score["player"] += 5;
std::cout << score["player"] << '\n';
return 0;
}Elemente löschen
erase() entfernt ein Element anhand des Schlüssels oder eines Iterators. Bei Übergabe eines Schlüssels gibt die Funktion die Anzahl der entfernten Elemente zurück.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
m.erase("b");
std::cout << m.size() << " left\n";
for (const auto& p : m) std::cout << p.first << ' ';
std::cout << '\n';
return 0;
}at() verwenden
at() gibt eine Referenz auf den Wert eines Schlüssels zurück und löst std::out_of_range aus, wenn der Schlüssel fehlt. Anders als [] fügt die Funktion niemals ein Element ein.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"k", 42}};
std::cout << m.at("k") << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Wortfrequenzen zählen
Eine klassische Verwendung von std::map ist das Zählen von Vorkommen. Der Operator [] initialisiert neue Schlüssel standardmäßig mit 0, sodass ++ einfach funktioniert.
#include <iostream>
#include <map>
#include <string>
int main() {
std::string words[] = {"cat", "dog", "cat", "bird", "dog", "cat"};
std::map<std::string, int> freq;
for (const auto& w : words) freq[w]++;
for (const auto& p : freq) std::cout << p.first << ": " << p.second << '\n';
return 0;
}Strukturierte Bindungen
Mit C++17 können Sie jedes Paar mithilfe von strukturierten Bindungen entpacken und dem Schlüssel sowie dem Wert lesbare Namen geben.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"red", 1}, {"green", 2}};
for (const auto& [name, value] : m) {
std::cout << name << " -> " << value << '\n';
}
return 0;
}Prüfen, ob die Map leer ist
empty() gibt an, ob die Map keine Elemente enthält, und clear() entfernt alle Elemente auf einmal.
#include <iostream>
#include <map>
int main() {
std::map<int, int> m{{1, 1}, {2, 4}};
std::cout << std::boolalpha << m.empty() << '\n';
m.clear();
std::cout << m.empty() << '\n';
return 0;
}Kurze Überprüfung
Testen Sie Ihr Verständnis der Sortierung von std::map.
Zusammenfassung
Sie haben gelernt, dass std::map:
- Eindeutige sortierte Schlüssel speichert, die Werten zugeordnet sind
insert,[],find,count,atunderaseunterstützt- in aufsteigender Schlüsselreihenfolge mit Paaren iteriert, die Sie mithilfe strukturierter Bindungen entpacken können
Als Nächstes sehen Sie std::set zum Speichern ausschließlich sortierter eindeutiger Werte.
Häufig gestellte Fragen
Ist die Lektion „std::map“ kostenlos?
Ja — der vollständige Text von „std::map“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „std::map“?
Geordnete Schlüssel-Wert-Speicherung Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „std::map“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.