std::unordered_map
Recherche rapide fondée sur le hachage
std::unordered_map est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Qu’est-ce que unordered_map ?
std::unordered_map stocke des paires clé-valeur dans une table de hachage. En moyenne, les recherches, insertions et suppressions s’effectuent en temps constant, mais les éléments ne sont pas triés.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << ages["Alice"] << '\n';
return 0;
}map ou unordered_map
Choisissez selon vos besoins :
map: triée, opérations en O(log n).unordered_map: non ordonnée, opérations en O(1) en moyenne.
Utilisez unordered_map lorsque vous avez uniquement besoin de recherches rapides.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> m{{3, "c"}, {1, "a"}, {2, "b"}};
std::cout << m.size() << " entries (order not guaranteed)\n";
return 0;
}Insérer et mettre à jour
La même interface de programmation que pour map : utilisez [], insert() ou emplace().
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
m["x"] = 1;
m.insert({"y", 2});
m.emplace("z", 3);
std::cout << m.size() << '\n';
return 0;
}Rechercher avec find
find() renvoie un itérateur ou end(). Cela évite d’insérer accidentellement une valeur par défaut, comme le ferait [].
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}};
auto it = m.find("a");
if (it != m.end()) std::cout << it->second << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Vérifier l’existence
count() renvoie 0 ou 1, et C++20 ajoute contains() pour effectuer une vérification booléenne explicite.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"key", 99}};
std::cout << m.count("key") << '\n';
std::cout << m.count("missing") << '\n';
return 0;
}Parcourir les éléments
Vous pouvez parcourir les éléments, mais l’ordre n’est pas spécifié. Ne comptez jamais sur un ordre trié ou sur l’ordre d’insertion.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
int total = 0;
for (const auto& [k, v] : m) total += v;
std::cout << "sum = " << total << '\n';
return 0;
}Supprimer des éléments
erase() supprime les éléments correspondant à une clé et renvoie le nombre d’éléments supprimés.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}};
m.erase("a");
std::cout << m.count("a") << ' ' << m.size() << '\n';
return 0;
}Compter rapidement les fréquences
Pour les grands ensembles de données lorsque l’ordre n’a pas d’importance, unordered_map compte les fréquences plus rapidement que map.
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::string items[] = {"a", "b", "a", "c", "b", "a"};
std::unordered_map<std::string, int> freq;
for (const auto& s : items) freq[s]++;
std::cout << "a appears " << freq["a"] << " times\n";
return 0;
}Utiliser at()
at() renvoie une référence et lève std::out_of_range si la clé est absente, sans jamais effectuer d’insertion.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m{{"score", 42}};
std::cout << m.at("score") << '\n';
return 0;
}Insertion par défaut avec []
L’accès à une clé absente avec [] l’insère avec une valeur initialisée par valeur (0 pour les entiers). Soyez prudent : la map grandit silencieusement.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> m;
std::cout << m["new"] << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Vider la map
clear() vide la table, et empty() indique si elle ne contient aucun élément.
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, int> m{{1, 1}, {2, 2}};
m.clear();
std::cout << std::boolalpha << m.empty() << '\n';
return 0;
}Vérification rapide
Vérifiez votre compréhension de l’ordre dans unordered_map.
Récapitulatif
Vous avez appris que std::unordered_map :
- utilise une table de hachage pour effectuer les opérations en O(1) en moyenne
- ne garantit aucun ordre
- possède la même interface de programmation que
map(find,count,at,erase)
Ensuite, vous découvrirez unordered_set pour stocker rapidement des éléments uniques.
Questions Fréquemment Posées
La leçon « std::unordered_map » est-elle gratuite ?
Oui — le texte complet de « std::unordered_map » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « std::unordered_map » ?
Recherche rapide fondée sur le hachage Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « std::unordered_map » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.