std::flat_multimap
| Definiert in Header <flat_map> |
||
| template< class Key, |
(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 |
(seit C++26) |
Inhalt |
[edit] Iterator-Ungültigkeit
| Dieser Abschnitt ist unvollständig |
[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 |
mapped_container_type
|
MappedContainer |
key_type
|
Key |
mapped_type
|
T |
value_type
|
std::pair<key_type, mapped_type> |
key_compare
|
Compare |
Referenz
|
std::pair<const key_type&, mapped_type&> |
const_reference
|
std::pair<const key_type&, const mapped_type&> |
size_type
|
std::size_t |
difference_type
|
std::ptrdiff_t |
iterator
|
implementierungsdefiniert LegacyInputIterator, ConstexprIterator(seit C++26) und random_access_iterator zu value_type |
const_iterator
|
implementierungsdefiniert LegacyInputIterator, ConstexprIterator(seit C++26) und random_access_iterator zu const value_type |
reverse_iterator
|
std::reverse_iterator<iterator> |
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
containers
|
Typ, der die zugrunde liegenden Container beschreibt struct containers |
[edit] Member-Klassen
vergleicht Objekte vom Typ value_type(class) |
[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) | |
| (Destruktor) (implizit deklariert) |
zerstört jedes Element des Container-Adapters (öffentliche Memberfunktion) |
| weist Werte dem Container-Adapter zu (public member function) | |
Iteratoren | |
| gibt einen Iterator zum Anfang zurück (public member function) | |
| gibt einen Iterator zum Ende zurück (public member function) | |
| gibt einen Reverse-Iterator zum Anfang zurück (public member function) | |
| gibt einen Reverse-Iterator zum Ende zurück (public member function) | |
Kapazität | |
| prüft, ob der Container-Adapter leer ist (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function) | |
Modifizierer | |
| konstruiert Elemente direkt (in-place) (public member function) | |
| konstruiert Elemente "in place" unter Verwendung eines Hinweises (public member function) | |
| fügt Elemente ein (public member function) | |
| fügt einen Bereich von Elementen ein (public member function) | |
| extrahiert die zugrunde liegenden Container (public member function) | |
| ersetzt die zugrunde liegenden Container (public member function) | |
| entfernt Elemente (public member function) | |
| tauscht die Inhalte (public member function) | |
| leert den Inhalt (public member function) | |
Suche | |
| sucht ein Element mit einem bestimmten Schlüssel (public member function) | |
| gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen (public member function) | |
| prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält (public member function) | |
| gibt einen Iterator zum ersten Element zurück, das *nicht kleiner* als der gegebene Schlüssel ist (public member function) | |
| gibt einen Iterator zum ersten Element zurück, das *größer* als der gegebene Schlüssel ist (public member function) | |
| gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen (public member function) | |
Observer | |
| gibt die Funktion zurück, die Schlüssel vergleicht (public member function) | |
gibt die Funktion zurück, die Schlüssel in Objekten vom Typ value_type vergleicht(public member function) | |
| direkter Zugriff auf den zugrunde liegenden Schlüsselcontainer (public member function) | |
| direkter Zugriff auf den zugrunde liegenden Wertecontainer (public member function) | |
[edit] Nicht-Member-Funktionen
| (C++23) |
vergleicht lexikografisch die Werte zweier flat_multimaps(function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| (C++23) |
entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) |
[edit] Hilfsklassen
| spezialisiert das std::uses_allocator Typ-Trait (Klassenvorlagenspezialisierung) |
[edit] Tags
| zeigt an, dass Elemente eines Bereichs sortiert sind (Eindeutigkeit ist nicht erforderlich) (Tag) |
[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
| Dieser Abschnitt ist unvollständig Grund: kein 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) |
| Sammlung von Schlüssel-Wert-Paaren, sortiert nach Schlüsseln (Klassenvorlage) | |
| (C++11) |
Sammlung von Schlüssel-Wert-Paaren, gehasht nach Schlüsseln (Klassenvorlage) |