2012-05-30 17 views

risposta

14

In C++ 11 map::at esiste (chi lo sapeva?).

Si genera un'eccezione se la chiave non esiste, find restituisce aMap.end() se l'elemento non esiste, e operator[]valore inizializza un nuovo valore per il tasto corrispondente se nessun valore esiste lì.

+2

[Ovviamente lo fa] (http://en.cppreference.com/w/cpp/container/map/at) ... –

+1

@KerrekSB (dal C++ 11) non lo sapeva. –

28

Se si accede a una chiave utilizzando l'operatore di indicizzazione [] che non è attualmente parte di una mappa, allora aggiunge automaticamente una chiave per voi. Questo è un enorme avvertimento e prendilo in considerazione. Per questo motivo, preferisco utilizzare l'operatore di indicizzazione [] per l'impostazione e .find()/.at() per la ricerca.

Un altro vantaggio di usare .at() sopra [] è il fatto che può operare su un const std::map, mentre [] non.