hash_set Class
Hinweis |
---|
Diese API ist veraltet.Die Alternative ist unordered_set Class. |
Das Containerklasse hash_set ist eine Erweiterung der Standardvorlagenbibliothek (STL) und für den Speicher und den schnellen Abrufen von Daten aus einer Auflistung verwendet, in der die Werte der Elemente, die enthalten sind, eindeutig und Aufschlag als die Schlüsselwerte sind.
template <
class Key,
class Traits=hash_compare<Key, less<Key> >,
class Allocator=allocator<Key>
>
class hash_set
Parameter
Key
Der im hash_set gespeichert werden, Elementdatentyp.Traits
Der Typ, der zwei Funktionsobjekte umfasst, von einer Klasse vergleichen, die ein binäres Prädikat ist, das kann, zwei Elementwerte als Sortierschlüssel zu vergleichen, um deren relative Position und eine Hashfunktion zu bestimmen, die Schlüsselwerte, einer des unären Prädikats Zuordnung der Elemente ganzen Zahlen zu den Typ ohne Vorzeichen size_t ist.Dieses Argument ist optional und das hash_compare*<Key,* less*<Key> >* ist der Standardwert.Allocator
Der Typ, der die gespeicherte allocator-Objekt darstellt, die Details über die Belegung und Freigabe von Arbeitsspeicher hash_sets kapselt.Dieses Argument ist optional und der Standardwert ist allocator*<Key>.*
Hinweise
Das hash_set ist:
Ein vereinigender Container, der ein variabler Größencontainer, der den effizienten Abrufen von Elementwerten auf Grundlage eines zugeordneten Schlüsselwert unterstützt.Darüber hinaus ist es ein einfacher vereinigender Container, weil die Elementwerte die Schlüsselwerte sind.
Umkehrbar, da es einen bidirektionalen Iterator stellt, um auf die Elemente zuzugreifen.
Hash, da die - Elemente in Buckets auf dem Wert einer Hashfunktion gruppiert werden, die den Schlüsselwerten der Elemente angewendet wird.
Eindeutig insofern, dass jedes der Elemente einen eindeutigen Schlüssel verfügen muss.Da hash_set auch ein einfacher vereinigender Container ist, sind ihre Elemente auch eindeutig.
Eine Vorlagenklasse, da die Funktionen, die bereitstellt, und ist daher unabhängig des jeweiligen Typs der Daten generisch, die als Elemente oder Schlüssel enthalten sind.Die für Elemente und Schlüssel verwendet werden Datentypen, werden stattdessen als Parameter in der Klassenvorlage zusammen mit der Vergleichsfunktion und der Belegungsfunktion angegeben.
Der Hauptvorteil des Hash- zu Sortierung ist größere Effizienz; ein erfolgreiches Hashing führt Einfügen, Löschen und Suchen in der Konstantendurchschnittszeit verglichen mit einer Zeit aus, die für den Logarithmus der Anzahl der Elemente im Container für Sortierungstechniken proportional ist.Der Wert eines Elements in einem Satz nicht wird direkt geändert werden.Stattdessen müssen Sie alte Werte und Einsatzelemente mit neuen Werten löschen.
Die Auswahl des Containertyps sollte für den Typ zum Suchen und Einfügen im Allgemeinen basieren erfordert mit.Hash assoziative Container werden für die Vorgänge der Suche, Einfüge- und des Entfernens optimiert.Die Memberfunktionen, die explizit diese Vorgänge unterstützen, sind effizient, wenn sie mit einer gut entworfenen Hashfunktion verwendet werden und in einer Zeit ausführen, die im Durchschnitt Konstante und der Anzahl der Elemente im Container nicht abhängiges ist.Eine sorgfältig geplante Hashfunktion erzeugt eine einheitliche Hash Verteilung von Werten und reduziert die Anzahl von Konflikten, in denen ein Konflikt betont wird, um fungieren, wenn verschiedene Schlüsselwerte in den gleichen Hashwert zugeordnet werden.Im schlimmsten Fall mit der negativsten möglichen Hashfunktion, ist die Anzahl von Vorgängen zur Anzahl der Elemente in der Sequenz proportional (lineare Zeit).
Das hash_set sollte der assoziative Container der Auswahl sein, wenn die Bedingungen, die die Werte mit ihren Schlüssel zuordnen, durch die Anwendung erfüllt werden.Die Elemente eines hash_set sind eindeutig und Aufschlag als eigene Sortierschlüssel.Ein Modell für diesen Typ der Struktur ist eine sortierte Liste beispielsweise von Wörtern, in denen die Wörter möglicherweise nur einmal auftreten.Wenn mehrere Vorkommen der Wörter ermöglicht wird, muss ein hash_multiset die entsprechende Containerstruktur sein.Wenn Werte an eine Liste von Schlüsselwörtern des eindeutigen Schlüssels angefügt werden müssen, wird ein hash_map eine entsprechende Struktur sein, um diese Daten enthalten.Wenn stattdessen die Schlüssel nicht eindeutig sind, wird ein hash_multimap der Container der Auswahl sein.
Das hash_set sortiert die Sequenz, die es steuert, indem ein gespeichertes Traits-Hashobjekt des Typs value_compare aufruft.Auf das gespeicherte Objekt wird zugegriffen werden, indem Sie die - Memberfunktion key_comp aufruft.Ein solches Funktionsobjekt muss sich genauso verhalten wie ein Objekt der Klasse hash_compare<Key, less<Key> >. Insbesondere dann alle Werte _Key von Typ Schlüssel, führt das Aufruf Merkmal (_Key ) eine Verteilung von Werten aus Typ size_t.
Im Allgemeinen müssen die Elemente lediglich weniger als vergleichbar, diese Reihenfolge eingerichtet sein:, damit alle zwei Elemente angegeben, es jedem bestimmt werden kann, dass sie äquivalent sind (insofern, dass kein kleiner ist als die andere ist), oder, dass von kleiner als das andere ist.Dies ergibt eine Reihenfolge zwischen den antivalenten Elementen.Auf einem mehr technischen Hinweis ist die Vergleichsfunktion ein binäres Prädikat, das eine strenge schwache Sortierung im mathematischen StandardSinn verursacht.Ein binäres Prädikat f(x,y) ist ein Funktionsobjekt, das zwei Argumentobjekt x und y und ein Rückgabewert des true oder false des verfügt.Eine Reihenfolge, die einem hash_set angewendet wird, ist eine strikte schwache binäre Sortierung, wenn das Prädikat irreflexiv transitiv ist, antisymmetrisch, und und wenn Äquivalenz transitiv ist, wobei zwei Objekte x und y definiert werden, sich zu entsprechen, wenn sowohl f(x,y) als auch f(y,x) falsch sind.Wenn die dickere Zustand der Gleichheit zwischen die Schlüssel der Äquivalenz ersetzt, wird die Reihenfolge Summe (insofern, dass alle Elemente zueinander in Beziehung stehen geordnet werden) und die Schlüssel, die verglichen werden, voneinander nicht wahrnehmbar sind.
Die tatsächliche Reihenfolge der Elemente in der Sequenz gesteuerten hängt von der Hashfunktion, von der Reihenfolgenfunktion und von der aktuellen Größe der Hashtabelle ab, die im Containerobjekt gespeichert wird.Sie können die aktuelle Größe der Hashtabelle nicht bestimmen, sodass Sie im Allgemeinen die Reihenfolge der Elemente in der Sequenz gesteuerten nicht vorhergesagt werden.Elemente Einfügen, macht keine Iteratoren ungültig, und Elemente entfernen, macht nur die Iteratoren ungültig die speziell an den entfernten Elemente gezeigt hätten.
Der Iterator, der von der hash_set Klasse bereitgestellt wird, ist ein bidirektionaler Iterator, aber der Klassenmember funktioniert Einfügen und hash_set haben Versionen, die als Vorlagenparameter einen abgeschwächten Eingabeiterator erhalten, dessen Funktionalitätsanforderungen minimaler sind als die, die durch die - Klasse von bidirektionalen Iteratoren gewährleistet werden.Die verschiedenen Iteratorkonzepte bilden eine Gruppe, die von Verfeinerungen in ihre Funktionalität verknüpft ist.Jedes Iteratorkonzept verfügt über einen eigenen Satz von Anforderungen, und Algorithmen, die ihnen Muss-Grenze ihre Annahmen zu Anforderungen arbeiten, können von diesem Typ des Iterators bereit.Es wird davon ausgegangen werden, dass ein Eingabeiterator möglicherweise wird dereferenziert, um einige - Objekt verwiesen wird, erhöht und dass er möglicherweise auf den folgenden Iterator in der Sequenz.Dies ist ein minimaler Satz von Funktionen, aber es genügt, um in der Lage zu sein, über einen Bereich von Iteratoren [_First, _Last) im Rahmen der Klassenmemberfunktionen sinnvoll zu verweisen.
In Visual C++ .NET 2003, sind Member der <hash_map> und <hash_set> Headerdateien nicht mehr im stdnamespace, sondern sind in den stdext Namespace verschoben wurde.Weitere Informationen finden Sie unter Der stdext-Namespace.
Konstruktoren
Erstellt hash_set, das leer ist oder, das eine Kopie von vollständig oder teilweise von anderen hash_set ist. |
Typedefs
Ein Typ, der die allocator-Klasse für das hash_set-Objekt darstellt. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der ein Element in consthash_set lesen kann. |
|
Ein Typ, der einen Zeiger auf einen const-Element in hash_set bereitstellt. |
|
Ein Typ, der einen Verweis auf ein const-Element bereitstellt, gespeicherten in hash_set zum Lesen und Ausführen von const Vorgänge. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der beliebige const-Element in hash_set lesen kann. |
|
Ein ganzzahliger Typ mit Vorzeichen, der verwendet werden kann, um die Anzahl von Elementen aus hash_set in einem Bereich zwischen Elementen darzustellen, hat sich auf den Iteratoren. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der lesen kann oder jedes Element in hash_set ändert. |
|
Ein Typ, der ein Funktionsobjekt bereitstellt, das zwei Sortierschlüssel vergleichen kann, um die relative Reihenfolge von zwei Elementen in hash_set zu bestimmen. |
|
Ein Typ, der ein Objekt beschrieben wird, das als Element von hash_set in seiner Kapazität als Sortierschlüssel gespeichert wird. |
|
Ein Typ, der einen Zeiger auf ein Element in hash_set bereitstellt. |
|
Ein Typ, der einen Verweis auf ein Element bereitstellt, gespeicherten in hash_set. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der lesen kann oder ein Element in hash_set umgekehrten ändert. |
|
Ein vorzeichenlose Typ ganzen Zahl, der die Anzahl der Elemente in hash_set darstellen kann. |
|
Ein Typ, der zwei Funktionsobjekte bereitstellt, ein binäres Prädikat der Klasse vergleichen, das zwei Elementwerte von hash_set vergleichen kann, um deren relative Position und ein unäres Prädikat zu bestimmen, das die Elemente auf. |
|
Ein Typ, der ein Objekt beschrieben wird, das als Element von hash_set in seiner Kapazität als Wert gespeichert wird. |
Memberfunktionen
Gibt einen Iterator zurück, der das erste Element in hash_set behandelt. |
|
Gibt einen konstanten Iterator zurück, der das erste Element in hash_set behandelt. |
|
Gibt einen konstanten Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit hash_set folgt. |
|
Löscht alle Elemente aus hash_set. |
|
Gibt die Anzahl der Elemente in hash_set zurück, dessen Schlüssel eine Parameter-angegebene Schlüssel entspricht. |
|
Gibt einen konstanten Iterator zurück, der das erste Element in umgekehrten hash_set behandelt. |
|
Gibt einen konstanten Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit umgekehrten hash_set folgt. |
|
Fügt ein - Element ein, das an der Stelle in hash_set erstellt wird. |
|
Fügt ein - Element ein, das an der Stelle in hash_set, mit einem Platzierungs-Hinweis erstellt wird. |
|
Prüft, ob hash_set leer ist. |
|
Gibt einen Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit hash_set folgt. |
|
Gibt ein Paar Iteratoren bzw. dem ersten Element in hash_set mit einem Schlüssel, die größer ist, als ein angegebener Schlüssel und dem ersten Element in hash_set mit einem Schlüssel zurück, die gleich oder größer ist als Schlüssel. |
|
Entfernt ein Element oder einen Bereich von Elementen in hash_set von den angegebenen Speicherorten oder Elemente entfernt, die einen angegebenen Schlüssel übereinstimmen. |
|
Gibt einen Iterator zurück, der die Position eines Elements in hash_set abweicht, das eine Schlüsselentsprechung zu einem angegebenen Schlüssel verfügt. |
|
Gibt eine Kopie des allocator-Objekts zurück, das verwendet wird, um hash_set zu erstellen. |
|
Fügt ein Element oder einen Bereich von Elementen in hash_set ein. |
|
Ruft eine Kopie des Vergleichsobjekts ab, das den Reihenfolgentasten in hash_set verwendet wird. |
|
Gibt einen Iterator zum ersten Element in hash_set mit einem Schlüssel zurück, die gleich oder größer ist als ein angegebener Schlüssel. |
|
Gibt die maximale Länge hash_set zurück. |
|
Gibt einen Iterator zurück, der das erste Element in umgekehrten hash_set behandelt. |
|
Gibt einen Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit umgekehrten hash_set folgt. |
|
Gibt die Anzahl der Elemente in hash_set zurück. |
|
Tauscht die Elemente aus zwei hash_set S. aus. |
|
Gibt einen Iterator zum ersten Element in hash_set zurück, das mit einem Schlüssel, die gleich oder größer ist als ein angegebener Schlüssel. |
|
Ruft eine Kopie des Hashmerkmalsobjekts ab, das verwendet wird, um Elementschlüsselwerte in hash_set zu hashen und zu sortieren. |
Operatoren
Ersetzt die Elemente von hash_set durch eine Kopie von einem anderen hash_set. |
Anforderungen
Header: <hash_set>
Namespace: stdext
Siehe auch
Referenz
Threadsicherheit in der C++-Standardbibliothek