Namensräume
Varianten
Aktionen

std::flat_multimap

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

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

> class flat_multimap;
(seit C++23)

Der `flat_multimap` ist ein Container-Adapter, der die Funktionalität eines assoziativen Containers mit Schlüssel-Wert-Paaren bereitstellt, wobei mehrere Einträge mit demselben Schlüsselwert zugelassen werden. Schlüssel werden mithilfe der Vergleichsfunktion Compare sortiert.

Die Klassenschablone flat_multimap fungiert als Wrapper für die beiden zugrunde liegenden Container, die als Objekte vom Typ KeyContainer bzw. MappedContainer übergeben werden. Der erste Container ist sortiert, und für jeden Schlüssel befindet sich der entsprechende Wert im zweiten Container am selben Index (Offset). Die Anzahl der Elemente in beiden Containern ist gleich.

Ü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_multimap erfüllt die Anforderungen an Container, ReversibleContainer, optionale Container-Anforderungen und alle Anforderungen an AssociativeContainer (einschließlich logarithmischer Suchkomplexität), mit der Ausnahme, 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_multimap` unterstützt die meisten Operationen von AssociativeContainer, die gleiche Schlüssel verwenden.

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

std::flat_multimap-Objekte können jedoch im Allgemeinen nicht constexpr sein, da jeder dynamisch zugewiesene Speicher in derselben Auswertung eines konstanten Ausdrucks freigegeben werden muss.

(seit C++26)

Inhalt

[edit] Iterator-Ungültigkeit

[edit] Schablonenparameter

Key - Der Typ der Schlüssel. Das Programm ist ill-formed, wenn Key nicht denselben Typ wie KeyContainer::value_type hat.
T - Der Typ der zugeordneten Werte. Das Programm ist ill-formed, wenn T nicht denselben Typ wie MappedContainer::value_type hat.
Compare - Ein Compare-Typ, der eine strikte schwache Ordnung bereitstellt.
KeyContainer
MappedContainer
- Die Typen der zugrunde liegenden SequenceContainer zum Speichern von Schlüsseln und zugeordneten Werten entsprechend. Die Iteratoren solcher Container sollten LegacyRandomAccessIterator erfüllen oder random_access_iterator modellieren. Aufrufe ihrer Memberfunktionen size und max_size sollten keine Ausnahme auslösen.

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

[edit] Member-Typen

Typ Definition
key_container_type KeyContainer[edit]
mapped_container_type MappedContainer[edit]
key_type Key[edit]
mapped_type T[edit]
value_type std::pair<key_type, mapped_type>[edit]
key_compare Compare[edit]
Referenz std::pair<const key_type&, mapped_type&>[edit]
const_reference std::pair<const key_type&, const mapped_type&>[edit]
size_type std::size_t[bearbeiten]
difference_type std::ptrdiff_t[bearbeiten]
iterator implementierungsdefiniert LegacyInputIterator, ConstexprIterator(seit C++26) und random_access_iterator zu value_type[edit]
const_iterator implementierungsdefiniert LegacyInputIterator, 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]
containers Typ, der die zugrunde liegenden Container beschreibt

struct containers
{
    key_container_type keys;
    mapped_container_type values;
};
[edit]

[edit] Member-Klassen

vergleicht Objekte vom Typ value_type
(class) [edit]

[edit] Member-Objekte

Mitglied Beschreibung
containers c (privat) die angepassten Container
((exposition-only member object*)
key_compare compare (private) das Vergleichsfunktions-Objekt
((exposition-only member object*)

[edit] Member-Funktionen

konstruiert den flat_multimap
(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 die zugrunde liegenden Container
(public member function) [edit]
ersetzt die 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]
direkter Zugriff auf den zugrunde liegenden Schlüsselcontainer
(public member function) [edit]
direkter Zugriff auf den zugrunde liegenden Wertecontainer
(public member function) [edit]

[edit] Nicht-Member-Funktionen

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

[edit] Hilfsklassen

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

[edit] Tags

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

[edit] Deduktionsleitfäden

[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_flat_map 202207L (C++23) std::flat_map und std::flat_multimap
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_multimap

[edit] Beispiel

[edit] Siehe auch

(C++23)
passt zwei Container an, um eine Sammlung von Schlüssel-Wert-Paaren, sortiert nach eindeutigen Schlüsseln, bereitzustellen
(Klassenvorlage) [edit]
Sammlung von Schlüssel-Wert-Paaren, sortiert nach Schlüsseln
(Klassenvorlage) [edit]
Sammlung von Schlüssel-Wert-Paaren, gehasht nach Schlüsseln
(Klassenvorlage) [edit]