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 <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.
- et
std::mapEn comparaison,unordered_mapPeut occuper plus de mémoire lorsque le nombre d'éléments est faible.