0Pricing
C++ Academy · Leçon

unordered_set

Éléments uniques fondés sur le hachage

unordered_set est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 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_set ?

std::unordered_set stocke des éléments uniques dans une table de hachage. En moyenne, les vérifications d’appartenance s’effectuent en temps constant, mais les éléments ne sont pas triés.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3, 2, 1};
    std::cout << s.size() << " unique values\n";
    return 0;
}

set ou unordered_set

Comme pour les maps :

  • set : trié, opérations en O(log n).
  • unordered_set : non ordonné, opérations en O(1) en moyenne.

Choisissez unordered_set pour effectuer les vérifications d’appartenance le plus rapidement possible.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> seen{"a", "b", "c"};
    std::cout << (seen.count("b") ? "yes" : "no") << '\n';
    return 0;
}

Insérer des valeurs

insert() ajoute un élément, l’ignore s’il est déjà présent et renvoie une paire dont .second indique s’il a été ajouté.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s;
    auto a = s.insert(5);
    auto b = s.insert(5);
    std::cout << std::boolalpha << a.second << ' ' << b.second << '\n';
    return 0;
}

Vérifications d’appartenance rapides

Vérifier si vous avez déjà rencontré une valeur est le cas d’utilisation classique. count() renvoie 0 ou 1.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> blocked{"spam", "junk"};
    std::cout << blocked.count("spam") << '\n';
    std::cout << blocked.count("ok") << '\n';
    return 0;
}

Supprimer des éléments

erase() supprime une valeur et renvoie le nombre de valeurs supprimées (0 ou 1).

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3};
    s.erase(2);
    std::cout << "count 2: " << s.count(2) << '\n';
    std::cout << "size: " << s.size() << '\n';
    return 0;
}

Détecter les doublons

Vous pouvez détecter le premier doublon d’un flux en insérant chaque valeur et en vérifiant le résultat booléen.

#include <iostream>
#include <unordered_set>

int main() {
    int data[] = {3, 7, 1, 7, 9};
    std::unordered_set<int> seen;
    for (int x : data) {
        if (!seen.insert(x).second) {
            std::cout << "first duplicate: " << x << '\n';
            break;
        }
    }
    return 0;
}

Parcourir les éléments

Le parcours fonctionne, mais l’ordre est non spécifié. Additionnez ou traitez les éléments sans supposer un ordre particulier.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{10, 20, 30};
    int total = 0;
    for (int x : s) total += x;
    std::cout << "sum = " << total << '\n';
    return 0;
}

Supprimer les doublons d’un intervalle

Construisez un unordered_set à partir d’un intervalle pour supprimer rapidement les doublons (l’ordre n’est pas conservé).

#include <iostream>
#include <unordered_set>
#include <vector>

int main() {
    std::vector<int> v{1, 2, 2, 3, 3, 3};
    std::unordered_set<int> u(v.begin(), v.end());
    std::cout << u.size() << " unique\n";
    return 0;
}

find ou count

find() vous fournit un itérateur vers l’élément afin que vous puissiez le réutiliser, tandis que count() indique simplement sa présence.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> s{"alpha", "beta"};
    auto it = s.find("beta");
    std::cout << (it != s.end() ? *it : "none") << '\n';
    return 0;
}

Vider et vérifier le contenu

clear() supprime tous les éléments et empty() vérifie qu’il n’en reste aucun.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3};
    s.clear();
    std::cout << std::boolalpha << s.empty() << '\n';
    return 0;
}

Intersection d’ensembles

Pour trouver les éléments communs, parcourez un ensemble et vérifiez l’appartenance dans l’autre.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> a{1, 2, 3, 4};
    std::unordered_set<int> b{3, 4, 5};
    for (int x : a) if (b.count(x)) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Vérification rapide

Vérifiez votre compréhension de unordered_set.

Récapitulatif

Vous avez appris que std::unordered_set :

  • stocke des éléments uniques avec des opérations en O(1) en moyenne
  • ne garantit aucun ordre
  • est idéal pour effectuer rapidement des vérifications d’appartenance et détecter les doublons

Ensuite, vous apprendrez à hacher vos propres types personnalisés.

Questions Fréquemment Posées

La leçon « unordered_set » est-elle gratuite ?

Oui — le texte complet de « unordered_set » 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 « unordered_set » ?

Éléments uniques fondés 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 2 sur 4.

Combien de temps prend la leçon « unordered_set » ?

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