Classes de conteneurs C++<map>

En C++,<map>Elle fait partie de la Standard Template Library (STL), fournissant un conteneur associatif pour stocker des paires clé-valeur.

mapLes éléments du conteneur sont automatiquement triés selon l'ordre des clés, ce qui le rend très adapté aux scénarios nécessitant une recherche rapide et des données ordonnées.

Définition et caractéristiques

  • Paires clé-valeur:mapIl stocke des paires clé-valeur, où chaque clé est unique.
  • Tri:mapLes éléments qu'il contient sont automatiquement triés selon l'ordre des clés, généralement par ordre croissant.
  • Unicité: chaque clé dansmapne peut apparaître qu'une seule fois.
  • Itérateur bidirectionnel:mapIl fournit des itérateurs bidirectionnels, permettant de parcourir les éléments vers l'avant et vers l'arrière.

Syntaxe de base

Inclure le fichier d'en-tête :

#include <map>

Déclarer le conteneur map :

std::map<key_type, value_type> myMap;
  • key_typeest le type de la clé.
  • value_typeest le type de la valeur.

Insérer des éléments :

myMap[key] = value;

Accéder aux éléments :

value = myMap[key];

Parcourir map :

for (std::map<key_type, value_type>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
    std::cout << it->first << " => " << it->second << std::endl;
}

Dans les normes C++11 et ultérieures, la partie de parcours peut être simplifiée en une boucle for basée sur une plage, ce qui rend le code plus concis :

for (auto &p : m) {
    std::cout << p.first << " : " << p.second << std::endl;
}

Exemple

Ce qui suit est un exemple utilisantmapun exemple simple, nous allons créer unmappour stocker les noms des employés et leurs âges, et parcourir celui-cimappour afficher le nom et l'âge de chaque employé.

Exemple

#include <iostream>#include <map>
#include <string>

int main() {
    // Créer un conteneur map pour stocker les noms et les âges des employés
    std::map<std::string, int> employees;

    // Insérer les informations des employés
    employees["Alice"] = 30;
    employees["Bob"] = 25;
    employees["Charlie"] = 35;

    // Parcourir la map et afficher les informations des employés
    for (std::map<std::string, int>::iterator it = employees.begin(); it != employees.end(); ++it) {
        std::cout << it->first << " a " << it->second << " ans." << std::endl;
    }

    return 0;
}

Sortie :

Alice is 30 years old.
Bob is 25 years old.
Charlie is 35 years old.

Utilisation avancée

Vérifier si une clé existe :

if (myMap.find(key) != myMap.end()) {
    // 键存在
}

Supprimer des éléments :

myMap.erase(key);

Vider la map :

myMap.clear();

Obtenir la taille de la map :

size_t size = myMap.size();

Autres méthodes :

myMap.empty();      // 是否为空
myMap.count("Bob"); // key 是否存在(返回 0 ou  1)

Pour un tri personnalisé, l'ordre par défaut est croissant ; vous pouvez utiliser std::greater ou une fonction de comparaison personnalisée :

std::map<int, std::string, std::greater<int>> m;  // 降序

Utiliser une fonction de comparaison personnalisée :

Exemple

#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);

    // Autres opérations...

    return 0;
}

map est un conteneur très utile dans la STL C++, particulièrement adapté aux scénarios qui nécessitent une recherche rapide et des données ordonnées.

Exemple

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> scores;

    // Insertion
    scores["Alice"] = 90;
    scores["Bob"] = 85;
    scores.insert({"Charlie", 92});

    // Parcourir
    for (auto &p : scores) {
        std::cout << p.first << " => " << p.second << std::endl;
    }

    // Trouver
    auto it = scores.find("Bob");
    if (it != scores.end()) {
        std::cout << "Score de Bob : " << it->second << std::endl;
    }

    // Supprimer
    scores.erase("Alice");

    std::cout << "Taille : " << scores.size() << std::endl;

    return 0;
}

Résultat de l'exécution (trié automatiquement par clé) :

Alice => 90
Bob => 85
Charlie => 92
Bob's score: 85
Size: 2
autres extensions