C++-Container-Klassen<map>
In C++,<map>Es ist Teil der Standard Template Library (STL) und bietet einen assoziativen Container zum Speichern von Schlüssel-Wert-Paaren.
mapDie Elemente im Container werden automatisch nach der Reihenfolge der Schlüssel sortiert, was ihn sehr geeignet für Szenarien macht, die schnelles Nachschlagen und geordnete Daten erfordern.
Definition und Eigenschaften
- Schlüssel-Wert-Paare:
mapEs speichert Schlüssel-Wert-Paare, wobei jeder Schlüssel eindeutig ist. - Sortierung:
mapDie Elemente darin werden automatisch nach der Reihenfolge der Schlüssel sortiert, üblicherweise in aufsteigender Reihenfolge. - Eindeutigkeit: Jeder Schlüssel in
mapkann nur vorkommen - Bidirektionaler Iterator:
mapEs bietet bidirektionale Iteratoren, mit denen Elemente vorwärts und rückwärts durchlaufen werden können.
Grundlegende Syntax
Header-Datei einbinden:
#include <map>
map-Container deklarieren:
std::map<key_type, value_type> myMap;
key_typeist der Typ des Schlüssels.value_typeist der Typ des Werts.
Elemente einfügen:
myMap[key] = value;
Auf Elemente zugreifen:
value = myMap[key];
map durchlaufen:
for (std::map<key_type, value_type>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << " => " << it->second << std::endl;
}
In C++11 und späteren Standards kann der Durchlauf-Teil zu einer bereichsbasierten for-Schleife vereinfacht werden, wodurch der Code prägnanter wird:
for (auto &p : m) {
std::cout << p.first << " : " << p.second << std::endl;
}
Beispiel
Das Folgende ist ein Beispiel unter Verwendung vonmapein einfaches Beispiel: Wir erstellen einemapum Mitarbeiternamen und deren Alter zu speichern und diese zu durchlaufenmapum den Namen und das Alter jedes Mitarbeiters auszugeben.
Beispiel
#include <string>
int main() {
// Einen Map-Container erstellen, um Mitarbeiternamen und deren Alter zu speichern
std::map<std::string, int> employees;
// Mitarbeiterinformationen einfügen
employees["Alice"] = 30;
employees["Bob"] = 25;
employees["Charlie"] = 35;
// Die Map durchlaufen und Mitarbeiterinformationen ausgeben
for (std::map<std::string, int>::iterator it = employees.begin(); it != employees.end(); ++it) {
std::cout << it->first << " ist " << it->second << " Jahre alt." << std::endl;
}
return 0;
}
Ausgabe:
Alice is 30 years old. Bob is 25 years old. Charlie is 35 years old.
Erweiterte Verwendung
Prüfen, ob ein Schlüssel existiert:
if (myMap.find(key) != myMap.end()) {
// 键存在
}
Elemente löschen:
myMap.erase(key);
Map leeren:
myMap.clear();
Die Größe der Map ermitteln:
size_t size = myMap.size();
Weitere Methoden:
myMap.empty(); // 是否为空
myMap.count("Bob"); // key 是否存在(返回 0 oder 1)
Für benutzerdefinierte Sortierung ist die Standardeinstellung aufsteigende Reihenfolge; Sie können std::greater oder eine benutzerdefinierte Vergleichsfunktion verwenden:
std::map<int, std::string, std::greater<int>> m; // 降序
Verwenden Sie eine benutzerdefinierte Vergleichsfunktion:
Beispiel
#include <string>
#include <functional>
bool myCompare(const std::string& a, const std::string& b) {
return a < b;
}
int main() {
std::map<std::string, int, std::function<bool(const std::string&, const std::string&)>> myMap(myCompare);
// Andere Operationen...
return 0;
}
map ist ein sehr nützlicher Container in C++ STL, besonders geeignet für Szenarien, die schnelles Nachschlagen und geordnete Daten erfordern.
Beispiel
#include <map>
#include <string>
int main() {
std::map<std::string, int> scores;
// Einfügen
scores["Alice"] = 90;
scores["Bob"] = 85;
scores.insert({"Charlie", 92});
// Durchlaufen
for (auto &p : scores) {
std::cout << p.first << " => " << p.second << std::endl;
}
// Suchen
auto it = scores.find("Bob");
if (it != scores.end()) {
std::cout << "Bobs Punktzahl: " << it->second << std::endl;
}
// Löschen
scores.erase("Alice");
std::cout << "Größe: " << scores.size() << std::endl;
return 0;
}
Ausführungsergebnis (automatisch nach Schlüssel sortiert):
Alice => 90 Bob => 85 Charlie => 92 Bob's score: 85 Size: 2Weitere Erweiterungen