std::flat_map
| Definiert in Header <flat_map> |
||
| template< class Key, |
(seit C++23) | |
Der flat_map ist ein Container-Adapter, der die Funktionalität eines assoziativen Containers bereitstellt, der Schlüssel-Wert-Paare mit eindeutigen Schlüsseln enthält. Die Schlüssel werden mithilfe der Vergleichsfunktion Compare sortiert.
Die Klassenvorlage flat_map 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_map erfüllt die Anforderungen von Container, ReversibleContainer, optionalen Container-Anforderungen und alle Anforderungen von AssociativeContainer (einschließlich logarithmischer Suchkomplexität), mit Ausnahme von
- 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.
Eine flat_map unterstützt die meisten Operationen von AssociativeContainer, die eindeutige Schlüssel verwenden.
|
Alle Memberfunktionen von |
(seit C++26) |
Inhalt |
[edit] Iterator-Invalidierung
| Dieser Abschnitt ist unvollständig |
[edit] Template-Parameter
| Key | - | Der Typ der Schlüssel. Das Programm ist ill-formed, wenn Key nicht derselbe Typ wie KeyContainer::value_type ist. |
| T | - | Der Typ der zugeordneten Werte. Das Programm ist ill-formed, wenn T nicht derselbe Typ wie MappedContainer::value_type ist. |
| Compare | - | Ein Compare-Typ, der eine strikte schwache Ordnung bereitstellt. |
| KeyContainer MappedContainer |
- | Die Typen der zugrunde liegenden SequenceContainer zur Speicherung von Schlüsseln und zugeordneten Werten. 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
|
implementierungsabhängiger LegacyInputIterator, ConstexprIterator(seit C++26) und random_access_iterator auf value_type |
const_iterator
|
implementierungsabhängiger LegacyInputIterator, ConstexprIterator(seit C++26) und random_access_iterator auf 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 (private) |
die adaptierten Container ((exposition-only member object*) |
key_compare compare (private) |
das Vergleichsfunktions-Objekt ((exposition-only member object*) |
[edit] Member-Funktionen
konstruiert die flat_map(public member function) | |
| (Destruktor) (implizit deklariert) |
zerstört jedes Element des Container-Adapters (öffentliche Memberfunktion) |
| weist Werte dem Container-Adapter zu (public member function) | |
Elementzugriff | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function) | |
| greift auf ein Element zu oder fügt es ein (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 "in place" ein, wenn der Schlüssel nicht existiert, tut nichts, wenn der Schlüssel existiert (public member function) | |
| fügt Elemente ein (public member function) | |
| fügt einen Bereich von Elementen ein (public member function) | |
| fügt ein Element ein oder weist einem vorhandenen Element einen Wert zu, falls der Schlüssel bereits existiert (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 die Werte zweier flat_maps lexicographisch(function template) |
| (C++23) |
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
| (C++23) |
zeigt an, dass Elemente eines Bereichs sortiert und eindeutig sind (Tag) |
[edit] Deduktionsanleitungen
[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_map |
[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 Schlüsseln, bereitzustellen (Klassenvorlage) |
| Sammlung von Schlüssel-Wert-Paaren, sortiert nach Schlüsseln, Schlüssel sind eindeutig (Klassenvorlage) | |
| (C++11) |
Sammlung von Schlüssel-Wert-Paaren, gehasht nach Schlüsseln, Schlüssel sind eindeutig (Klassenvorlage) |