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 inmapkann 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 <iostream>#include <map>
#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 <map>
#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 <iostream>
#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: 2
Weitere Erweiterungen