Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: operator[]

From cppreference.net

T & operator [ ] ( const Key & key ) ;
(1) (seit C++23)
T & operator [ ] ( Key && key ) ;
(2) (seit C++23)
template < class K >
T & operator [ ] ( K && x ) ;
(3) (seit C++23)

Gibt eine Referenz auf den Wert zurück, der einem Schlüssel entspricht, der äquivalent zu key oder x ist, wobei eine Einfügung durchgeführt wird, falls ein solcher Schlüssel noch nicht existiert.

1) Fügt ein value_type Objekt ein, das direkt konstruiert wird, falls der Schlüssel nicht existiert. Entspricht return try_emplace ( x ) . first - > second ; .
2) Fügt ein value_type Objekt ein, das direkt konstruiert wird, falls der Schlüssel nicht existiert. Entspricht return try_emplace ( std :: move ( x ) ) . first - > second ;
3) Fügt ein value_type Objekt ein, das direkt konstruiert wird, falls kein Schlüssel vorhanden ist, der transparent äquivalent zum Wert x vergleicht.
Entspricht return this - > try_emplace ( std:: forward < K > ( x ) ) . first - > second ; . Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn Compare transparent ist. Sie ermöglicht den Aufruf dieser Funktion ohne eine Instanz von Key zu konstruieren.

Inhaltsverzeichnis

Parameter

key - der Schlüssel des zu findenden Elements
x - ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann

Rückgabewert

1,2) Ein Verweis auf den zugeordneten Wert des neuen Elements, falls kein Element mit dem Schlüssel key existierte. Andernfalls ein Verweis auf den zugeordneten Wert des vorhandenen Elements, dessen Schlüssel äquivalent zu key ist.
3) Ein Verweis auf den zugeordneten Wert des neuen Elements, falls kein Element mit einem Schlüssel existierte, der äquivalent zum Wert x verglichen wird. Andernfalls ein Verweis auf den zugeordneten Wert des vorhandenen Elements, dessen Schlüssel äquivalent zu x verglichen wird.

Exceptions

Wenn eine Ausnahme von einer beliebigen Operation ausgelöst wird, hat die Einfügung keine Auswirkung.

Komplexität

Logarithmisch in der Größe des Containers, plus die Kosten für die Einfügung (falls vorhanden) eines leeren Elements.

Hinweise

operator [ ] ist nicht konstant, da er den Schlüssel einfügt, falls er nicht existiert. Falls dieses Verhalten unerwünscht ist oder der Container const ist, kann at verwendet werden.

insert_or_assign liefert mehr Informationen als operator [ ] und erfordert keine Default-Konstruierbarkeit des mapped type.

Beispiel

#include <iostream>
#include <string>
#include <flat_map>
void println(auto const comment, auto const& map)
{
    std::cout << comment << '{';
    for (const auto& pair : map)
        std::cout << '{' << pair.first << ": " << pair.second << '}';
    std::cout << "}\n";
}
int main()
{
    std::flat_map<char, int> letter_counts{{'a', 27}, {'b', 3}, {'c', 1}};
    println("letter_counts initially contains: ", letter_counts);
    letter_counts['b'] = 42; // aktualisiert einen vorhandenen Wert
    letter_counts['x'] = 9;  // fügt einen neuen Wert ein
    println("after modifications it contains: ", letter_counts);
    // zählt die Anzahl der Vorkommen jedes Wortes
    // (der erste Aufruf von operator[] initialisiert den Zähler mit null)
    std::flat_map<std::string, int>  word_map;
    for (const auto& w : {"this", "sentence", "is", "not", "a", "sentence",
                          "this", "sentence", "is", "a", "hoax"})
        ++word_map[w];
    word_map["that"]; // fügt nur das Paar {"that", 0} ein
    for (const auto& [word, count] : word_map)
        std::cout << count << " occurrence(s) of word '" << word << "'\n";
}

Ausgabe:

letter_counts initially contains: {{a: 27}{b: 3}{c: 1}}
after modifications it contains: {{a: 27}{b: 42}{c: 1}{x: 9}}
2 occurrence(s) of word 'a'
1 occurrence(s) of word 'hoax'
2 occurrence(s) of word 'is'
1 occurrence(s) of word 'not'
3 occurrence(s) of word 'sentence'
0 occurrence(s) of word 'that'
2 occurrence(s) of word 'this'

Siehe auch

Zugriff auf spezifiziertes Element mit Bereichsprüfung
(öffentliche Elementfunktion)
fügt ein Element ein oder weist dem aktuellen Element zu, wenn der Schlüssel bereits existiert
(öffentliche Elementfunktion)
fügt direkt ein, wenn der Schlüssel nicht existiert, tut nichts, wenn der Schlüssel existiert
(öffentliche Elementfunktion)