Namespaces
Variants

std:: unordered_multiset

From cppreference.net
Definiert in Header <unordered_set>
template <

class Key,
class Hash = std:: hash < Key > ,
class KeyEqual = std:: equal_to < Key > ,
class Allocator = std:: allocator < Key >

> class unordered_multiset ;
(1) (seit C++11)
namespace pmr {

template <
class Key,
class Hash = std:: hash < Key > ,
class Pred = std:: equal_to < Key >
> using unordered_multiset = std :: unordered_multiset < Key, Hash, Pred,
std:: pmr :: polymorphic_allocator < Key >> ;

}
(2) (seit C++17)

std::unordered_multiset ist ein assoziativer Container, der eine Menge möglicherweise nicht eindeutiger Objekte vom Typ Key enthält. Suche, Einfügung und Entfernung haben durchschnittlich konstante Zeitkomplexität.

Internally sind die Elemente nicht in einer bestimmten Reihenfolge sortiert, sondern in Buckets organisiert. In welchen Bucket ein Element platziert wird, hängt vollständig vom Hash seines Wertes ab. Dies ermöglicht schnellen Zugriff auf einzelne Elemente, da sobald der Hash berechnet ist, dieser auf den exakten Bucket verweist, in dem das Element platziert ist.

Die Iterationsreihenfolge dieses Containers muss nicht stabil sein (daher kann beispielsweise std::equal nicht verwendet werden, um zwei std::unordered_multiset s zu vergleichen), außer dass jede Gruppe von Elementen, deren Schlüssel als äquivalent verglichen werden (Vergleich auf Gleichheit mit key_eq() als Komparator), einen zusammenhängenden Teilbereich in der Iterationsreihenfolge bildet, der auch mit equal_range() zugänglich ist.

std::unordered_multiset erfüllt die Anforderungen von Container , AllocatorAwareContainer , UnorderedAssociativeContainer .

Alle Memberfunktionen von std::unordered_multiset sind constexpr : Es ist möglich, std::unordered_multiset -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::unordered_multiset -Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.

(seit C++26)

Inhaltsverzeichnis

Template-Parameter

Mitgliedertypen

Typ Definition
key_type Key
value_type Key
size_type Vorzeichenloser Ganzzahltyp (üblicherweise std::size_t )
difference_type Ganzzahltyp mit Vorzeichen (üblicherweise std::ptrdiff_t )
hasher Hash
key_equal KeyEqual
allocator_type Allocator
reference value_type &
const_reference const value_type &
pointer std:: allocator_traits < Allocator > :: pointer
const_pointer std:: allocator_traits < Allocator > :: const_pointer
iterator Konstanter LegacyForwardIterator und ConstexprIterator (seit C++26) zu value_type
const_iterator LegacyForwardIterator und ConstexprIterator (seit C++26) zu const value_type
local_iterator Ein Iteratortyp, dessen Kategorie, Wert-, Differenz-, Zeiger- und
Referenztypen mit iterator übereinstimmen. Dieser Iterator
kann zum Durchlaufen eines einzelnen Buckets, aber nicht über Buckets hinweg verwendet werden
const_local_iterator Ein Iteratortyp, dessen Kategorie, Wert-, Differenz-, Zeiger- und
Referenztypen mit const_iterator übereinstimmen. Dieser Iterator
kann zum Durchlaufen eines einzelnen Buckets, aber nicht über Buckets hinweg verwendet werden
node_type (seit C++17) eine Spezialisierung von node handle , die einen Container-Knoten darstellt

Memberfunktionen

Konstruiert den unordered_multiset
(öffentliche Member-Funktion)
zerstört den unordered_multiset
(öffentliche Elementfunktion)
weist dem Container Werte zu
(öffentliche Elementfunktion)
gibt den zugeordneten Allokator zurück
(öffentliche Elementfunktion)
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function)
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion)
Kapazität
prüft, ob der Container leer ist
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion)
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion)
Modifikatoren
löscht den Inhalt
(öffentliche Elementfunktion)
fügt Elemente ein oder Knoten (seit C++17)
(öffentliche Elementfunktion)
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion)
Konstruiert Element direkt vor Ort
(öffentliche Elementfunktion)
Konstruiert Elemente direkt unter Verwendung eines Hinweises
(öffentliche Elementfunktion)
löscht Elemente
(öffentliche Elementfunktion)
tauscht die Inhalte aus
(öffentliche Elementfunktion)
(C++17)
extrahiert Knoten aus dem Container
(öffentliche Elementfunktion)
(C++17)
verbindet Knoten aus einem anderen Container
(öffentliche Elementfunktion)
Lookup
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion)
findet Element mit spezifischem Schlüssel
(öffentliche Elementfunktion)
(C++20)
prüft, ob der Container ein Element mit spezifischem Schlüssel enthält
(öffentliche Elementfunktion)
gibt den Bereich der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion)
Bucket-Schnittstelle
gibt einen Iterator zum Anfang des angegebenen Buckets zurück
(öffentliche Elementfunktion)
gibt einen Iterator zum Ende des angegebenen Buckets zurück
(öffentliche Member-Funktion)
gibt die Anzahl der Buckets zurück
(öffentliche Elementfunktion)
gibt die maximale Anzahl von Buckets zurück
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente in einem bestimmten Bucket zurück
(public member function)
gibt den Bucket für einen bestimmten Schlüssel zurück
(öffentliche Elementfunktion)
Hash-Policy
Gibt die durchschnittliche Anzahl von Elementen pro Bucket zurück
(öffentliche Elementfunktion)
verwaltet die maximale durchschnittliche Anzahl von Elementen pro Bucket
(öffentliche Elementfunktion)
reserviert mindestens die angegebene Anzahl von Buckets und regeneriert die Hashtabelle
(öffentliche Elementfunktion)
reserviert Platz für mindestens die angegebene Anzahl von Elementen und regeneriert die Hashtabelle
(öffentliche Elementfunktion)
Beobachter
Gibt die Funktion zurück, die zum Hashen der Schlüssel verwendet wird
(öffentliche Elementfunktion)
gibt die Funktion zurück, die zum Vergleichen von Schlüsseln auf Gleichheit verwendet wird
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

(C++11) (C++11) (entfernt in C++20)
vergleicht die Werte im unordered_multiset
(Funktionstemplate)
spezialisiert den std::swap Algorithmus
(Funktionstemplate)
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktionstemplate)

Deduktionsleitfäden

(seit C++17)

Hinweise

Die Member-Typen iterator und const_iterator können Aliase für denselben Typ sein. Dies bedeutet, dass das Definieren eines Paares von Funktionsüberladungen, die die beiden Typen als Parametertypen verwenden, die One Definition Rule verletzen kann. Da iterator in const_iterator konvertierbar ist, wird stattdessen eine einzelne Funktion mit einem const_iterator als Parametertyp funktionieren.

Feature-Test Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-Konstruktion und -Einfügung für Container
__cpp_lib_constexpr_unordered_set 202502L (C++26) constexpr std::unordered_muliset

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 2050 C++11 die Definitionen von reference , const_reference , pointer
und const_pointer basierten auf allocator_type
basieren auf value_type und
std::allocator_traits

Siehe auch

Sammlung eindeutiger Schlüssel, gehasht nach Schlüsseln
(Klassen-Template)
Sammlung von Schlüsseln, sortiert nach Schlüsseln
(Klassen-Template)
passt einen Container an, um eine Sammlung von Schlüsseln zu bieten, sortiert nach Schlüsseln
(Klassen-Template)