Namensräume
Varianten
Aktionen

std::multiset

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in Header <set>
template<

    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>

> class multiset;
(1)
namespace pmr {

    template<
        class Key,
        class Compare = std::less<Key>
    > using multiset = std::multiset<Key, Compare, std::pmr::polymorphic_allocator<Key>>;

}
(2) (seit C++17)

std::multiset ist ein assoziativer Container, der eine sortierte Menge von Objekten vom Typ Key enthält. Im Gegensatz zu set sind mehrere Schlüssel mit äquivalenten Werten erlaubt. Die Sortierung erfolgt mithilfe der Schlüsselvergleichsfunktion Compare. Such-, Einfüge- und Löschoperationen haben logarithmische Komplexität.

Überall dort, wo die Standardbibliothek die Anforderungen von Compare verwendet, wird die Äquivalenz mithilfe der auf Compare beschriebenen Äquivalenzrelation bestimmt. Ungenau ausgedrückt werden zwei Objekte a und b als äquivalent betrachtet, wenn keines kleiner als das andere ist: !comp(a, b) && !comp(b, a).

Die Reihenfolge der Elemente, die äquivalent sind, ist die Einfügungsreihenfolge und ändert sich nicht.

(seit C++11)

std::multiset erfüllt die Anforderungen von Container, AllocatorAwareContainer, AssociativeContainer und ReversibleContainer.

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

std::multiset-Objekte können jedoch im Allgemeinen nicht constexpr sein, da jeder dynamisch zugewiesene Speicher im selben konstanten Ausdruck freigegeben werden muss.

(seit C++26)

Inhalt

[edit] Template-Parameter

[edit] Member-Typen

Typ Definition
key_type Key[edit]
value_type Key[edit]
size_type Vorzeichenloser Ganzzahltyp (normalerweise std::size_t)[edit]
difference_type Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t)[edit]
key_compare Compare[edit]
value_compare Compare[edit]
allocator_type Allocator[edit]
Referenz value_type&[edit]
const_reference const value_type&[edit]
Zeiger

Allocator::pointer

(bis C++11)

std::allocator_traits<Allocator>::pointer

(seit C++11)
[Bearbeiten]
const_pointer

Allocator::const_pointer

(bis C++11)

std::allocator_traits<Allocator>::const_pointer

(seit C++11)
[Bearbeiten]
iterator Konstanter LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu value_type[edit]
const_iterator LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu const value_type[edit]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]
node_type (seit C++17) eine Spezialisierung von node handle, die einen Containerknoten repräsentiert[edit]

[edit] Memberfunktionen

konstruiert das multiset
(public member function) [edit]
destruiert das multiset
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]
gibt den zugehörigen Allocator zurück
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der Container leer ist
(public member function) [edit]
Gibt die Anzahl der Elemente zurück
(public member function) [edit]
Gibt die maximal mögliche Anzahl von Elementen zurück
(public member function) [edit]
Modifizierer
leert den Inhalt
(public member function) [edit]
fügt Elemente ein oder Knoten(seit C++17)
(public member function) [edit]
fügt einen Bereich von Elementen ein
(public member function) [edit]
(C++11)
konstruiert Elemente direkt (in-place)
(public member function) [edit]
konstruiert Elemente "in place" unter Verwendung eines Hinweises
(public member function) [edit]
entfernt Elemente
(public member function) [edit]
tauscht die Inhalte
(public member function) [edit]
(C++17)
extrahiert Knoten aus dem Container
(public member function) [edit]
(C++17)
fügt Knoten aus einem anderen Container zusammen
(public member function) [edit]
Suche
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]
sucht ein Element mit einem bestimmten Schlüssel
(public member function) [edit]
(C++20)
prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält
(public member function) [edit]
gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]
gibt einen Iterator zum ersten Element zurück, das *nicht kleiner* als der gegebene Schlüssel ist
(public member function) [edit]
gibt einen Iterator zum ersten Element zurück, das *größer* als der gegebene Schlüssel ist
(public member function) [edit]
Observer
gibt die Funktion zurück, die Schlüssel vergleicht
(public member function) [edit]
gibt die Funktion zurück, die Schlüssel in Objekten vom Typ value_type vergleicht
(public member function) [edit]

[edit] Nicht-Member-Funktionen

(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20)
vergleicht die Werte von zwei multisets lexikographisch
(function template) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]

Deduction Guides

(seit C++17)

[edit] Hinweise

Die Member-Typen iterator und const_iterator können Aliase für denselben Typ sein. Das bedeutet, dass die Definition eines Paares von Funktionsüberladungen, die die beiden Typen als Parametertypen verwenden, die Ein-Definitionen-Regel (ODR) verletzen kann. Da iterator in const_iterator konvertierbar ist, funktioniert stattdessen eine einzelne Funktion mit einem const_iterator als Parametertyp.

Feature-Test-Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Bereichskonstruktion und -einfügung für Container
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::multiset

[edit] Beispiel

[edit] Defect reports

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 103 C++98 Iterator erlaubt Modifikation von Schlüsseln Iterator als konstant markiert
LWG 230 C++98 Key musste nicht CopyConstructible sein
(ein Schlüssel vom Typ Key konnte möglicherweise nicht konstruiert werden)
Key musste außerdem
CopyConstructible sein

[edit] Siehe auch

Sammlung eindeutiger Schlüssel, sortiert nach Schlüsseln
(Klassenvorlage) [edit]
Sammlung von Schlüsseln, gehasht nach Schlüsseln
(Klassenvorlage) [edit]
passt einen Container an, um eine Sammlung von Schlüsseln, sortiert nach Schlüsseln, bereitzustellen
(Klassenvorlage) [edit]