2011-10-02 23 views
7

Por ejemplo, considerar el suceso las palabras en un libro, vi a alguien simplemente escribió:En el mapa <string, int>, ¿se garantiza que int se inicialice a cero?

map<string, int> count; 
string s; 
while (cin >> s) count[s]++; 

¿Es esta la forma correcta de hacerlo? Probé en mi máquina y parece que sí. Pero, ¿la inicialización a cero está garantizada? Si no lo es, me imagino un código como este:

map<string, int> count; 
string s; 
while (cin >> s) 
    if (count.find(s) != count.end()) count[s]++; 
    else count[s] = 1; 

Respuesta

12

Sí, operator[] en un std::map inicializará el valor con T(), que en el caso de int, es cero.

Esto se documenta en la sección 23.4.4.3 de la norma el C++:

T& operator[](const key_type& x); 

Efectos: Si no hay equivalente clave para x en el mapa, inserciones value_type(x, T()) en el mapa.

+0

¡Gracias! ¿Tiene alguna referencia para su punto? –

Cuestiones relacionadas