Beh, io non sono d'accordo con la risposta di Kiril in una certa misura e penso che sia non pieno quindi do il mio.
Secondo cppreference
std::map::operator[]
equivale a una determinata chiamata insert()
. Da questo penso anche che abbia torto dicendo che il valore verrà sovrascritto. Dice: "Valore restituito Riferimento al valore mappato del nuovo elemento se non esisteva alcun elemento con chiave chiave, altrimenti viene restituito un riferimento al valore mappato dell'elemento esistente."
Quindi sembra che sia un involucro conveniente. Lo insert()
, tuttavia, ha questo vantaggio di essere sovraccaricato, quindi fornisce più funzionalità sotto un unico nome.
Dare un punto a Kiril, che sembrano avere una funzionalità leggermente diversa a prima vista, tuttavia IHMO gli esempi che fornisce non sono equivalenti tra loro.
Pertanto, come esempio/motivo per utilizzare insert
Vorrei sottolineare, inserendo più elementi contemporaneamente o utilizzando hint
(chiamate 3-6 in here).
Quindi insert() è necessario in una mappa o unordered_map? Direi di si. Inoltre, lo operator[]
non è necessario in quanto può essere emulato/implementato utilizzando insert
, mentre l'altro modo è impossibile! Fornisce semplicemente più funzionalità. Tuttavia, scrivere cose come (insert(std::make_pair(key, T())).first)->second)
(dopo cppreference) sembra ingombrante di []
.
Quindi, c'è qualche motivo per utilizzare invece la funzione membro di inserimento? Direi per la sovrapposizione di funzionalità, diavolo no.
Ok, quindi cosa succede se si inseriscono due articoli con la stessa chiave? – johnbakers
@SebbyJohanns - guarda la mia modifica, per quanto riguarda il tuo commento. –
I dati per quella chiave non verranno sovrascritti. La notazione della parentesi quadra è equivalente a '(* ((m.insert (value_type (k, data_type()))). First)). Second = data;' (preso in prestito dalla nota 3 [qui] (http: // www. sgi.com/tech/stl/Map.html)). Vale a dire, inserisce la chiave con un dato costruito di default, quindi accetta l'iteratore restituito (il '.first'), che punta alla coppia di valori-chiave vecchia, non modificata, se esistente, o alla nuova uno appena aggiunto e imposta i dati (il '.secondo') associati alla chiave al valore desiderato. – metal