hash_multimap Class
Hinweis |
---|
Diese API ist veraltet.Die Alternative ist unordered_multimap Class. |
Das Containerklasse hash_multimap ist eine Erweiterung der Standardvorlagenbibliothek und für den Speicher und den schnellen Abrufen von Daten aus einer Auflistung verwendet, in der jedes Element ein Paar ist, das einen Sortierschlüssel, dessen Wert nicht, muss eindeutig sein und einen Wert der Daten zugeordnet sind.
template <
class Key,
class Type,
class Traits=hash_compare<Key, less<Key> >,
class Allocator=allocator<pair <const Key, Type> >
>
class hash_multimap
Parameter
Schlüssel
Der im hash_multimap gespeichert werden, Schlüsseldatentyp.Text [Type]
Der im hash_multimap gespeichert werden, Elementdatentyp.Traits
Der Typ, der zwei Funktionsobjekte umfasst, von einer Klasse Traits, die ist, 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 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_multimaps kapselt.Dieses Argument ist optional und der Standardwert ist allocator*<*pair *<*const verschlüsseln, Type> >.
Hinweise
Das hash_multimap ist:
Ein vereinigender Container, der ein variabler Größencontainer, der den effizienten Abrufen von Elementwerten auf Grundlage eines zugeordneten Schlüsselwert unterstützt.
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.
mehrere, da die - Elemente nicht erforderlich ist, um eindeutige Schlüssel verfügen, damit ein Schlüsselwert viele Elementdatenwerte verfügen kann, die zugeordnet.
Ein vereinigender Container der Paaren, weil die Elementwerte von ihren Schlüsselwerten unterschiedlich sind.
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 hash_multimap, jedoch nicht der zugehörige Schlüsselwert, werden direkt geändert werden.Stattdessen müssen die Schlüsselwerte, die mit alten Elementen zugeordnet sind, gelöscht und neue Schlüsselwerte mit den neuen Elementen zugeordnet werden eingefügt wurde.
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_multimap sollte der assoziative Container der Auswahl sein, wenn die Bedingungen, die die Werte mit ihren Schlüssel zuordnen, durch die Anwendung erfüllt werden.Ein Modell für diesen Typ der Struktur ist eine sortierte Liste von Schlüsselwörtern mit den zugeordneten Zeichenfolgenwerten, die sagen wir Definitionen bereitstellen, in denen die Wörter nicht immer eindeutig definiert wurden.Wenn, stattdessen, die Schlüsselwörter eindeutig definiert wurden, um Schlüssel eindeutig sind, wird ein hash_map der Container der Auswahl sein.Wenn, dann, nur die Liste von Wörtern gespeichert wird, muss ein hash_set der richtige Container handeln.Wenn mehrere Vorkommen der Wörter ermöglicht wird, muss ein hash_multiset die entsprechende Containerstruktur sein.
Das hash_multimap 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 für alle Werte _Key des Typs Key, führt der Aufruf Traits(_Key)* eine Verteilung von Werten des Typs 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_multimap 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, um 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_multimap Klasse bereitgestellt wird, ist ein bidirektionaler Iterator, aber der Klassenmember funktioniert Einfügen und hash_multimap 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 hat ein eigenes hash_multimap 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 minimales hash_multimap der Funktionalität, sondern es genügt, um in der Lage zu sein, über einen Bereich von Iteratoren [_First, _Last) im Rahmen der Memberfunktionen 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 eine Liste einer bestimmten Größe oder mit Elementen eines bestimmten Werts oder mit bestimmten allocator oder als Kopie von anderen hash_multimap. |
Typedefs
Ein Typ, der die allocator-Klasse für das hash_multimap-Objekt darstellt. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der ein Element in consthash_multimap lesen kann. |
|
Ein Typ, der einen Zeiger auf einen const-Element in hash_multimap bereitstellt. |
|
Ein Typ, der einen Verweis auf ein const-Element bereitstellt, gespeicherten in hash_multimap zum Lesen und Ausführen von const Vorgänge. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der beliebige const-Element in hash_multimap lesen kann. |
|
Ein ganzzahliger Typ mit Vorzeichen, der verwendet werden kann, um die Anzahl von Elementen aus hash_multimap 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_multimap ändert. |
|
Ein Typ, der ein Funktionsobjekt bereitstellt, das zwei Sortierschlüssel vergleichen kann, um die relative Reihenfolge von zwei Elementen in hash_multimap zu bestimmen. |
|
Ein Typ, der das Sortierschlüsselobjekt beschreibt, das jedes Element hash_multimap bildet. |
|
Ein Typ, der den Datentyp darstellt, in hash_multimap gespeichert wurden. |
|
Ein Typ, der einen Zeiger auf ein Element in hash_multimap bereitstellt. |
|
Ein Typ, der einen Verweis auf ein Element bereitstellt, gespeicherten in hash_multimap. |
|
Ein Typ, der einen bidirektionalen Iterator stellt, der lesen kann oder ein Element in hash_multimap umgekehrten ändert. |
|
Ein vorzeichenlose Typ ganzen Zahl, der die Anzahl der Elemente in hash_multimap darstellen kann. |
|
Ein Typ, der ein Funktionsobjekt bereitstellt, das zwei Elemente als Sortierschlüssel vergleichen kann, um deren relative Position in hash_multimap zu bestimmen. |
Memberfunktionen
Gibt einen Iterator zurück, der das erste Element in hash_multimap behandelt. |
|
Gibt einen konstanten Iterator zurück, der das erste Element in hash_multimap behandelt. |
|
Gibt einen konstanten Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit hash_multimap folgt. |
|
Löscht alle Elemente aus hash_multimap. |
|
Gibt die Anzahl der Elemente in hash_multimap zurück, dessen Schlüssel eine Parameter-angegebene Schlüssel entspricht. |
|
Gibt einen konstanten Iterator zurück, der das erste Element in umgekehrten hash_multimap behandelt. |
|
Gibt einen konstanten Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit umgekehrten hash_multimap folgt. |
|
Fügt ein - Element ein, das an der Stelle in hash_multimap erstellt wird. |
|
Fügt ein - Element ein, das an der Stelle in hash_multimap, mit einem Platzierungs-Hinweis erstellt wird. |
|
Prüft, ob hash_multimap leer ist. |
|
Gibt einen Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit hash_multimap folgt. |
|
Gibt einen Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit hash_multimap folgt. |
|
Entfernt ein Element oder einen Bereich von Elementen in hash_multimap von den angegebenen Speicherorten |
|
Gibt einen Iterator zurück, der die Position eines Elements in hash_multimap 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_multimap zu erstellen. |
|
Fügt ein Element oder einen Bereich von Elementen in hash_multimap in einer angegebenen Position ein. |
|
Ruft eine Kopie des Vergleichsobjekts ab, das den Reihenfolgentasten in hash_multimap verwendet wird. |
|
Gibt einen Iterator zum ersten Element in hash_multimap zurück, das mit einem Schlüsselwert, den oder entspricht eines angegebenen Schlüssels größer als der. |
|
Gibt die maximale Länge hash_multimap zurück. |
|
Gibt einen Iterator zurück, der das erste Element in umgekehrten hash_multimap behandelt. |
|
Gibt einen Iterator zurück, der den Speicherort abweicht, der dem letzten Element mit umgekehrten hash_multimap folgt. |
|
Gibt eine neue Größe für hash_multimap an. |
|
Tauscht die Elemente aus zwei hash_multimap S. aus. |
|
Gibt einen Iterator zum ersten Element in hash_multimap zurück, das mit einem Schlüsselwert, der größer als der eines angegebenen Schlüssels ist. |
|
Ruft eine Kopie des Vergleichsobjekts ab, das den Reihenfolgenelementwerten in hash_multimap verwendet wird. |
Operatoren
Ersetzt die Elemente von hash_multimap durch eine Kopie von einem anderen hash_multimap. |
Anforderungen
Header: <hash_map>
Namespace: stdext
Siehe auch
Referenz
Threadsicherheit in der C++-Standardbibliothek