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.