std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: operator[]
|
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.
value_type
Objekt ein, das direkt konstruiert wird, falls der Schlüssel nicht existiert. Entspricht
return
try_emplace
(
x
)
.
first
-
>
second
;
.
value_type
Objekt ein, das direkt konstruiert wird, falls der Schlüssel nicht existiert. Entspricht
return
try_emplace
(
std
::
move
(
x
)
)
.
first
-
>
second
;
value_type
Objekt ein, das direkt konstruiert wird, falls kein Schlüssel vorhanden ist, der transparent
äquivalent
zum Wert
x
vergleicht.
Compare
transparent
ist. Sie ermöglicht den Aufruf dieser Funktion ohne eine Instanz von
Key
zu konstruieren.
| Informationen zur Iterator-Invalidierung sind kopiert von hier |
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
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) |