Namensräume
Varianten
Aktionen

std::flat_multiset

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

    class Key,
    class Compare = std::less<Key>,
    class KeyContainer = std::vector<Key>

> class flat_multiset;
(seit C++23)

Der flat_multiset ist ein Container-Adapter, der die Funktionalität eines assoziativen Containers bereitstellt, der eine sortierte Menge von Objekten vom Typ Key speichert. Im Gegensatz zu std::flat_set sind mehrere Schlüssel mit äquivalenten Werten erlaubt. Die Sortierung erfolgt unter Verwendung der Schlüsselvergleichsfunktion Compare.

Die Klassenvorlage flat_multiset fungiert als Wrapper für den zugrundeliegenden sortierten Container, der als Objekt vom Typ KeyContainer übergeben wird.

Überall dort, wo die Standardbibliothek die Compare-Anforderungen verwendet, wird die Eindeutigkeit mithilfe der Äquivalenzrelation bestimmt. Informell gesagt, werden zwei Objekte a und b als äquivalent betrachtet, wenn keines kleiner als das andere ist: !comp(a, b) && !comp(b, a).


std::flat_multiset erfüllt die Anforderungen an Container, ReversibleContainer, optionale Container-Anforderungen und alle Anforderungen an AssociativeContainer (einschließlich logarithmischer Suchkomplexität), außer dass

  • Anforderungen im Zusammenhang mit Knoten nicht zutreffen,
  • die Anforderungen an die Iterator-Invalidierung unterschiedlich sind,
  • die Komplexität von Einfüge- und Löschvorgängen linear ist.

Ein flat_multiset unterstützt die meisten Operationen von AssociativeContainer, die gleiche Schlüssel verwenden.

Alle Member-Funktionen von std::flat_multiset sind constexpr: es ist möglich, std::flat_multiset-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

std::flat_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

[bearbeiten] Iterator-Ungültigkeit

[bearbeiten] Template-Parameter

Key - Der Typ der gespeicherten Elemente. Das Programm ist ill-formed, wenn Key nicht denselben Typ wie KeyContainer::value_type hat.
Compare - Ein Compare-Typ, der eine strikte schwache Ordnung bereitstellt.
KeyContainer - Der Typ des zugrundeliegenden SequenceContainer zur Speicherung der Elemente. Die Iteratoren eines solchen Containers sollten LegacyRandomAccessIterator erfüllen oder random_access_iterator modellieren.

Die Standardcontainer std::vector und std::deque erfüllen diese Anforderungen.

[bearbeiten] Member-Typen

Typ Definition
container_type KeyContainer[bearbeiten]
key_type Key[edit]
value_type Key[edit]
key_compare Compare[edit]
value_compare Compare[edit]
Referenz value_type&[edit]
const_reference const value_type&[edit]
size_type typename KeyContainer::size_type[bearbeiten]
difference_type typename KeyContainer::difference_type[bearbeiten]
iterator implementierungsabhängiger LegacyRandomAccessIterator, ConstexprIterator(seit C++26) und random_access_iterator zu value_type[bearbeiten]
const_iterator Implementierungsdefinierter LegacyRandomAccessIterator, ConstexprIterator(seit C++26) und random_access_iterator zu const value_type[edit]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]

[bearbeiten] Member-Objekte

Mitglied Beschreibung
container_type c (private) der adaptierte Container
((exposition-only member object*)
key_compare compare (private) das Vergleichsfunktions-Objekt
((exposition-only member object*)

[bearbeiten] Member-Funktionen

konstruiert den flat_multiset
(public member function) [edit]
(Destruktor)
(implizit deklariert)
zerstört jedes Element des Container-Adapters
(öffentliche Memberfunktion)
weist Werte dem Container-Adapter zu
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der Container-Adapter 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
konstruiert Elemente direkt (in-place)
(public member function) [edit]
konstruiert Elemente "in place" unter Verwendung eines Hinweises
(public member function) [edit]
fügt Elemente ein
(public member function) [edit]
fügt einen Bereich von Elementen ein
(public member function) [edit]
extrahiert den zugrunde liegenden Container
(public member function) [edit]
ersetzt den zugrunde liegenden Container
(public member function) [bearbeiten]
entfernt Elemente
(public member function) [edit]
tauscht die Inhalte
(public member function) [edit]
leert den Inhalt
(public member function) [edit]
Suche
sucht ein Element mit einem bestimmten Schlüssel
(public member function) [edit]
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]
prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält
(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]
gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen
(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]

[bearbeiten] Nicht-Member-Funktionen

vergleicht die Werte zweier flat_multisets lexikographisch
(function template) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]

[bearbeiten] Hilfsklassen

spezialisiert das std::uses_allocator Typ-Trait
(Klassenvorlagenspezialisierung) [edit]

[bearbeiten] Tags

zeigt an, dass Elemente eines Bereichs sortiert sind (Eindeutigkeit ist nicht erforderlich)
(Tag)[edit]

[bearbeiten] Deduktionsführer

[bearbeiten] 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_flat_set 202207L (C++23) std::flat_set und std::flat_multiset
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_multiset

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

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