es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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,>

Tags:  , ,

Answer

  1. Avatar for 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 en std::map como en std::unordered_map. Como bien señalaste, un nuevo elemento se inserta como T(), 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.

Comments are closed.