0Pricing
C++ Academy · Lektion

unordered_set

Hashbasierte eindeutige Elemente

unordered_set ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist unordered_set?

std::unordered_set speichert eindeutige Elemente in einer Hash-Tabelle. Mitgliedschaftstests benötigen im Durchschnitt konstante Zeit, aber es gibt keine sortierte Reihenfolge.

#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 oder unordered_set

Wie bei Maps:

  • set: sortiert, O(log n).
  • unordered_set: ungeordnet, durchschnittlich O(1).

Wählen Sie unordered_set für die schnellsten Mitgliedschaftstests.

#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;
}

Werte einfügen

insert() fügt ein Element hinzu, ignoriert es aber, wenn es bereits vorhanden ist, und gibt ein Paar zurück, dessen .second angibt, ob es hinzugefügt wurde.

#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;
}

Schnelle Mitgliedschaftstests

Zu prüfen, ob Sie einen Wert bereits gesehen haben, ist der klassische Anwendungsfall. count() gibt 0 oder 1 zurück.

#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;
}

Elemente löschen

erase() entfernt einen Wert und gibt zurück, wie viele Werte entfernt wurden (0 oder 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;
}

Duplikate erkennen

Sie können das erste Duplikat in einem Datenstrom erkennen, indem Sie das Element einfügen und das boolesche Ergebnis prüfen.

#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;
}

Durchlaufen

Das Durchlaufen funktioniert, aber die Reihenfolge ist nicht spezifiziert. Summieren oder verarbeiten Sie die Elemente, ohne eine bestimmte Reihenfolge vorauszusetzen.

#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;
}

Einen Bereich von Duplikaten bereinigen

Erstellen Sie aus einem Bereich ein unordered_set, um Duplikate schnell zu entfernen (die Reihenfolge bleibt nicht erhalten).

#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 oder count

find() liefert einen Iterator auf das Element, sodass Sie es weiterverwenden können, während count() lediglich angibt, ob es vorhanden ist.

#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;
}

Leeren und leer prüfen

clear() entfernt alle Elemente, und empty() prüft, ob keine vorhanden sind.

#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;
}

Schnittmenge von Sets

Um gemeinsame Elemente zu finden, durchlaufen Sie ein Set und prüfen die Mitgliedschaft im anderen.

#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;
}

Kurze Überprüfung

Testen Sie Ihr Verständnis von unordered_set.

Zusammenfassung

Sie haben gelernt, dass std::unordered_set:

  • eindeutige Elemente mit durchschnittlich O(1) großen Operationen speichert
  • keine garantierte Reihenfolge besitzt
  • ideal für schnelle Mitgliedschaftstests und die Erkennung von Duplikaten ist

Als Nächstes lernen Sie, eigene benutzerdefinierte Typen zu hashen.

Häufig gestellte Fragen

Ist die Lektion „unordered_set“ kostenlos?

Ja — der vollständige Text von „unordered_set“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „unordered_set“?

Hashbasierte eindeutige Elemente Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „unordered_set“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. std::unordered_map
  2. unordered_set
  3. Benutzerdefinierte Hashfunktionen
  4. Überlegungen zur Performance
← Zurück zu C++ Academy