Bibliothèque standard C++<unordered_map>

En C++,<unordered_map>Fait partie de la Standard Template Library (STL), fournissant un conteneur de paires clé-valeur basé sur une table de hachage.

etstd::mapDifférent,unordered_mapNe garantit pas l'ordre des éléments, mais offre généralement une recherche plus rapide.

unordered_mapEst un conteneur associatif qui stocke des paires clé-valeur, où chaque clé est unique.unordered_mapUtilise une table de hachage pour stocker les éléments, ce qui lui donne une complexité temporelle constante en moyenne pour les opérations de recherche, d'insertion et de suppression.

Syntaxe

Les suivantes sontunordered_mapsyntaxe de base :

#include <unordered_map>

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

Constructeur

unordered_mapIl peut être construit de plusieurs manières :

// 默认构造
std::unordered_map<int, std::string> myMap;

// 构造并初始化
std::unordered_map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

// 构造并指定初始容量
std::unordered_map<int, std::string> myMap(10);

// 构造并复制另一个 unordered_map
std::unordered_map<int, std::string> anotherMap = myMap;

Opérations de base

Insérer des éléments :

myMap.insert({3, "three"});

Accéder aux éléments :

std::string value = myMap[1]; // 获取键为1的值

Supprimer des éléments :

myMap.erase(1); // 删除键为1的元素

Rechercher des éléments :

auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end()) {
    std::cout << "Found: " << it->second << std::endl;
}

Exemple

Voici un exemple utilisantunordered_mapun exemple simple, incluant le résultat de sortie.

Exemple

#include <iostream>
#include <unordered_map>

int main() {
    // Créer un unordered_map avec des clés int et des valeurs string
    std::unordered_map<int, std::string> myMap;

    // Insérer quelques paires clé-valeur
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    // Afficher tous les éléments
    for (const auto& pair : myMap) {
        std::cout << "Clé : " << pair.first << ", Valeur : " << pair.second << std::endl;
    }

    // Accéder à la valeur d'une clé spécifique
    std::cout << "Valeur pour la clé 2 : " << myMap[2] << std::endl;

    // Effacer l'élément avec la clé 1
    myMap.erase(1);

    // Afficher à nouveau tous les éléments
    std::cout << "Après avoir effacé la clé 1 :" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << "Clé : " << pair.first << ", Valeur : " << pair.second << std::endl;
    }

    return 0;
}

Sortie :

Key: 1, Value: one
Key: 2, Value: two
Key: 3, Value: three
Value for key 2: two
After erasing key 1:
Key: 2, Value: two
Key: 3, Value: three

Notes

  • unordered_mapL'ordre des éléments n'est pas garanti, donc l'ordre d'itération des éléments peut varier d'une exécution à l'autre.
  • La performance de la table de hachage dépend d'une bonne fonction de hachage pour éviter des collisions de hachage excessives.
  • etstd::mapEn comparaison,unordered_mapPeut occuper plus de mémoire lorsque le nombre d'éléments est faible.
autres extensions