C++-Containerklassen<unordered_set>
In C++,<unordered_set>ist Teil der Standard Template Library (STL) und bietet einen auf Hash-Tabellen basierenden Container zum Speichern einer Sammlung eindeutiger Elemente.
undsetAnders,unordered_setgarantiert nicht die Reihenfolge der Elemente, bietet jedoch in der Regel schnellere Such-, Einfüge- und Löschvorgänge.
unordered_setist eine Template-Klasse, definiert wie folgt:
#include <unordered_set> std::unordered_set<Key, Hash = std::hash<Key>, Pred = std::equal_to<Key>, Alloc = std::allocator<Key>>
Keyist gespeichert inunordered_setdie Elementtypen in.Hashist eine Funktion oder ein Funktionsobjekt, das verwendet wird, um den Hash-Wert eines Elements zu erzeugen; der Standardwert iststd::hash<Key>。Predist ein binäres Prädikat, das verwendet wird, um zu vergleichen, ob zwei Elemente gleich sind; der Standardwert iststd::equal_to<Key>。Allocist der Allocator-Typ, der zur Verwaltung der Speicherzuweisung verwendet wird; der Standardwert iststd::allocator<Key>。
Syntax
Die folgenden sind einige grundlegendeunordered_setOperationen:
-
KonstruktorErzeuge ein leeres
unordered_set。std::unordered_set<int> uset;
-
Element einfügen: Verwenden Sie
insert()Methode.uset.insert(10);
-
Element suchen: Verwenden Sie
find()Methode.auto it = uset.find(10); if (it != uset.end()) { // 元素存在 } -
Element löschen: Verwenden Sie
erase()Methode.uset.erase(10);
-
size- und empty-Prüfung: Verwenden Sie
size()undempty()Methode.size_t size = uset.size(); bool isEmpty = uset.empty();
-
Container leeren: Verwenden Sie
clear()Methode.uset.clear();
Beispiel
Nachfolgend ein Beispiel unter Verwendung vonunordered_setein einfaches Beispiel, einschließlich der Ausgabe.
Beispiel
#include <unordered_set>
int main() {
// Erstelle ein unordered_set vom Integer-Typ
std::unordered_set<int> uset;
// Elemente einfügen
uset.insert(10);
uset.insert(20);
uset.insert(30);
// Die Elemente im unordered_set ausgeben
std::cout << "Elemente in uset: ";
for (int elem : uset) {
std::cout << elem << " ";
}
std::cout << std::endl;
// Element finden
auto it = uset.find(20);
if (it != uset.end()) {
std::cout << "Element 20 in uset gefunden." << std::endl;
} else {
std::cout << "Element 20 nicht in uset gefunden." << std::endl;
}
// Elemente löschen
uset.erase(20);
std::cout << "Nach dem Löschen von 20, Elemente in uset: ";
for (int elem : uset) {
std::cout << elem << " ";
}
std::cout << std::endl;
// Größe prüfen und ob es leer ist
std::cout << "Größe von uset: " << uset.size() << std::endl;
std::cout << "Ist uset leer? " << (uset.empty() ? "Ja" : "Nein") << std::endl;
// Das unordered_set leeren
uset.clear();
std::cout << "Ist uset nach dem Leeren leer? " << (uset.empty() ? "Ja" : "Nein") << std::endl;
return 0;
}
Ausgabe:
Elements in uset: 10 20 30 Element 20 found in uset. After erasing 20, elements in uset: 10 30 Size of uset: 2 Is uset empty? No After clearing, is uset empty? Yes
unordered_setist ein sehr nützlicher Container, besonders geeignet für Szenarien, die schnelles Suchen, Einfügen und Löschen erfordern, ohne dass eine Reihenfolge der Elemente erforderlich ist.