Share via


unordered_multiset-Klasse

Die Vorlagenklasse beschreibt ein Objekt, das eine Elementsequenz variabler Länge vom Typ const Key steuert. Die Sequenz wird grob durch eine Hashfunktion sortiert, die die Sequenz in eine geordnete Gruppe von Untersequenzen, so genannte Buckets, unterteilt. Innerhalb jedes Buckets bestimmt eine Vergleichsfunktion, ob ein Elementpaar eine entsprechende Reihenfolge hat. Jedes Element dient sowohl als Sortierschlüssel als auch als Wert. Die Sequenz wird so dargestellt, dass die Suche, das Einfügen und das Entfernen eines beliebigen Elements mit einer Reihen von Vorgängen möglich ist, die unabhängig von der Anzahl von Elementen in der Sequenz (konstante Zeit) sein können, zumindest, wenn alle Buckets von ungefähr gleicher Länge sind. Im schlimmsten Fall, d. h., wenn sich alle Elemente in einem Bucket befinden, ist die Anzahl von Vorgängen proportional zur Anzahl von Elementen in der Sequenz (lineare Zeit). Darüber hinaus führt das Einfügen eines Elements nicht dazu, dass Iteratoren ungültig werden, und durch das Entfernen eines Elements werden nur solche Iteratoren ungültig, die auf das entfernte Element gezeigt haben.

template<class Key,
    class Hash = std::hash<Key>,
    class Pred = std::equal_to<Key>,
    class Alloc = std::allocator<Key> >
    class unordered_multiset;

Parameter

Parameter

Beschreibung

Key

Der Schlüsseltyp.

Hash

Der Hashfunktionsobjekttyp.

Pred

Der Gleichheitsvergleich-Funktionsobjekttyp.

Alloc

Die Zuweisungsklasse.

Member

Typdefinition

Beschreibung

unordered_multiset::allocator_type

Der Typ einer Zuweisung für die Speicherverwaltung.

unordered_multiset::const_iterator

Der Typ eines konstanten Iterators für die gesteuerte Sequenz.

unordered_multiset::const_local_iterator

Der Typ eines konstanten Bucketiterators für die gesteuerte Sequenz.

unordered_multiset::const_pointer

Der Typ eines konstanten Zeigers auf ein Element.

unordered_multiset::const_reference

Der Typ eines konstanten Verweises auf ein Element.

unordered_multiset::difference_type

Der Typ eines Abstands mit Vorzeichen zwischen zwei Elementen.

unordered_multiset::hasher

Der Typ der Hashfunktion.

unordered_multiset::iterator

Der Typ eines Iterators für die gesteuerte Sequenz.

unordered_multiset::key_equal

Der Typ der Vergleichsfunktion.

unordered_multiset::key_type

Der Typ eines Sortierschlüssels.

unordered_multiset::local_iterator

Der Typ eines Bucketiterators für die gesteuerte Sequenz.

unordered_multiset::pointer

Der Typ eines Zeigers auf ein Element.

unordered_multiset::reference

Der Typ eines Verweises auf ein Element.

unordered_multiset::size_type

Der Typ eines Abstands ohne Vorzeichen zwischen zwei Elementen.

unordered_multiset::value_type

Der Typ eines Elements.

Memberfunktion

Beschreibung

unordered_multiset::begin

Legt den Anfang der kontrollierten Sequenz fest.

unordered_multiset::bucket

Ruft die Bucketnummer für einen Schlüsselwert ab.

unordered_multiset::bucket_count

Ruft die Anzahl von Buckets ab.

unordered_multiset::bucket_size

Ruft die Größe eines Buckets ab.

unordered_multiset::cbegin

Legt den Anfang der kontrollierten Sequenz fest.

unordered_multiset::cend

Legt das Ende der kontrollierten Sequenz fest.

unordered_multiset::clear

Entfernt alle Elemente.

unordered_multiset::count

Sucht die Anzahl von Elementen, die einem angegebenen Schlüssel entsprechen.

unordered_multiset::emplace

Fügt ein Element hinzu, das direkt erstellt wird.

unordered_multiset::emplace_hint

Fügt ein Element hinzu, das direkt mit Hinweis erstellt wird.

unordered_multiset::empty

Testet, ob keine Elemente vorhanden sind.

unordered_multiset::end

Legt das Ende der kontrollierten Sequenz fest.

unordered_multiset::equal_range

Sucht den Bereich, der einem angegebenen Schlüssel entspricht.

unordered_multiset::erase

Entfernt Elemente an den angegebenen Positionen.

unordered_multiset::find

Sucht ein Element, das einem angegebenen Schlüssel entspricht.

unordered_multiset::get_allocator

Ruft das gespeicherte Zuweisungsobjekt ab.

unordered_multiset::hash_function

Ruft das gespeicherte Hashfunktionsobjekt ab.

unordered_multiset::insert

Fügt Elemente hinzu.

unordered_multiset::key_eq

Ruft das gespeicherte Vergleichsfunktionsobjekt ab.

unordered_multiset::load_factor

Zählt die durchschnittliche Anzahl von Elementen pro Bucket.

unordered_multiset::max_bucket_count

Ruft die maximale Anzahl von Buckets ab.

unordered_multiset::max_load_factor

Ruft die maximale Anzahl von Elementen pro Bucket ab oder legt sie fest.

unordered_multiset::max_size

Ruft die maximale Größe der gesteuerten Sequenz ab.

unordered_multiset::rehash

Erstellt die Hashtabelle neu.

unordered_multiset::size

Ermittelt die Anzahl von Elementen.

unordered_multiset::swap

Vertauscht den Inhalt von zwei Containern.

unordered_multiset::unordered_multiset

Erstellt ein container-Objekt.

Operator

Beschreibung

unordered_multiset::operator=

Kopiert eine Hashtabelle.

Hinweise

Das Objekt sortiert die Sequenz, die es steuert, indem es zwei gespeicherte Objekte aufruft, ein Vergleichsfunktionsobjekt des Typs unordered_multiset::key_equal und ein Hashfunktionsobjekt des Typs unordered_multiset::hasher. Sie greifen auf das zuerst gespeicherte Objekt zu, indem Sie die Memberfunktion unordered_multiset::key_eq aufrufen(). Auf das zweite gespeicherte Objekt greifen Sie zu, indem Sie die Memberfunktion unordered_multiset::hash_function() aufrufen. Insbesondere für alle Werte X und Y vom Typ Key gibt der Aufruf von key_eq()(X, Y) nur "true" zurück, wenn die beiden Argumentwerte die entsprechende Reihenfolge aufweisen. Der Aufruf von hash_function()(keyval) ergibt eine Verteilung von Werten des Typs size_t. Im Gegensatz zur Vorlagenklasse unordered_set-Klasse stellt ein Objekt der Vorlagenklasse unordered_multiset nicht sicher, dass key_eq()(X, Y) für zwei Elemente der gesteuerten Sequenz immer "false" ist. (Die Schlüssel müssen nicht eindeutig sein.)

Das Objekt speichert auch einen Höchstlastfaktor, der die maximal erwünschte durchschnittliche Anzahl von Elementen pro Bucket angibt. Wenn durch Einfügen eines Elements der Wert unordered_multiset::load_factor() den Höchstlastfaktor überschreitet, erhöht der Container die Anzahl von Buckets und erstellt die Hashtabelle nach Bedarf neu.

Die tatsächliche Reihenfolge der Elemente in der gesteuerten Sequenz hängt von der Hashfunktion, von der Vergleichsfunktion, von der Einfügereihenfolge, vom Höchstlastfaktor und von der aktuellen Anzahl von Buckets ab. Sie können die Reihenfolge der Elemente in der gesteuerten Sequenz im Allgemeinen nicht vorhersagen. Sie können allerdings sicher sein, dass jede Teilmenge von Elementen, die die entsprechende Reihenfolge aufweisen, in der gesteuerten Sequenz benachbart sind.

Das Objekt belegt Speicher und gibt Speicher für die gesteuerte Sequenz durch ein gespeichertes Zuweisungsobjekt des Typs unordered_multiset::allocator_type frei. Ein solches Zuweisungsobjekt muss die gleiche externe Schnittstelle wie ein Objekt der Vorlagenklasse allocator aufweisen. Beachten Sie, dass das gespeicherte Zuweisungsobjekt nicht kopiert wird, wenn das Containerobjekt zugewiesen wird.

Anforderungen

Header: <unordered_set>

Namespace: std

Siehe auch

Referenz

<unordered_set>

Threadsicherheit in der C++-Standardbibliothek

Standardvorlagenbibliothek

Konzepte

Container