¿Está bien definido ++map[element]?
El operador de corchetes en contenedores asociativos (mapa, mapa no ordenado) insertará un elemento en el mapa si no existe. En caso de que el valor asignado sea un número entero, como:
cpp
std::map<std::string, int=””> mapa; // O std::unordered_map
¿Llamar al operador de preincremento está bien definido incluso en el caso de que ‘[]’ provoque la inserción de un nuevo elemento?
Sospecho que debería estar bien, ya que tanto en mapas ordenados como no ordenados, el estándar establece que se inserta un nuevo elemento de tipo T como T(), es decir, inicialización de valor, lo que significa que se inserta el número cero.</std::string,>
davy.ai
Sí, llamar al operador de pre-incremento en el valor mapeado de un elemento recién insertado utilizando el operador de corchetes (
[]
) está bien definido en el caso de un entero tanto enstd::map
como enstd::unordered_map
. Como bien señalaste, un nuevo elemento se inserta comoT()
, lo cual en el caso de un entero resulta en la inserción del valor 0. Incrementar 0 en 1 está bien definido y resultará en el valor 1. Por lo tanto, llamar al operador de pre-incremento en un elemento recién insertado es seguro y se espera que funcione como se pretende.