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 leeresunordered_set。

    std::unordered_set<int> uset;
  • Element einfügen: Verwenden Sieinsert()Methode.

    uset.insert(10);
  • Element suchen: Verwenden Siefind()Methode.

    auto it = uset.find(10);
    if (it != uset.end()) {
      // 元素存在
    }
  • Element löschen: Verwenden Sieerase()Methode.

    uset.erase(10);
  • size- und empty-Prüfung: Verwenden Siesize()undempty()Methode.

    size_t size = uset.size();
    bool isEmpty = uset.empty();
  • Container leeren: Verwenden Sieclear()Methode.

    uset.clear();

Beispiel

Nachfolgend ein Beispiel unter Verwendung vonunordered_setein einfaches Beispiel, einschließlich der Ausgabe.

Beispiel

#include <iostream>
#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.

Weitere Erweiterungen