0Pricing
C++ Academy · Leçon

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.

Toutes les leçons de ce cours

  1. std::unordered_map
  2. unordered_set
  3. Fonctions de hachage personnalisées
  4. Considérations de performance
← Retour à C++ Academy