son romualfons romualdfons romuald que las keywords etiquetas description c++ stl map

c++ - romualfons - ¿Qué devuelve la[STL] mapa STL si la clave no fue una clave inicializada en el mapa?



romualfons youtube (4)

Esta pregunta ya tiene una respuesta aquí:

Aquí hay un código de ejemplo:

#include<iostream> #include<map> #include<string> using namespace std; int main() { map<char, string> myMap; myMap[''a''] = "ahh!!"; cout << myMap[''a''] << endl << myMap[''b''] << endl; return 0; }

En este caso, me pregunto ¿qué devuelve myMap [''b'']?


Se devuelve un objeto construido por defecto (por ejemplo, una cadena vacía en este caso).

Esto se devuelve incluso cuando dices map[''a''] = "ahh!!"; . El operador [] inserta una cadena construida por defecto en la posición ''a'', y le devuelve una referencia, a la que luego se llama el operador =.


Si intenta acceder a un valor clave utilizando el operador de indexación [] , pueden suceder 2 cosas:

  1. El mapa contiene esta clave. Así se devolverá el valor clave correspondiente.
  2. El mapa no contiene la clave. En este caso, agregará automatically add a key al mapa con key value null .

Como ''b'' clave ''b'' no está en su mapa, agregará esta clave con el valor "" (cadena vacía) automáticamente e imprimirá esta cadena vacía.

Y aquí el tamaño del mapa aumentará en 1

Entonces, para buscar una clave puede usar .find() , que devolverá map.end() si no se encuentra la clave.
Y no se agregará ninguna llave adicional automáticamente

Y, obviamente, puede usar el operador [] cuando establece un valor para una clave


Un std::string ins construido de forma predeterminada se inserta en el std::map con la clave ''b'' y se devuelve una referencia al mismo.

A menudo es útil consultar la documentación , que define el comportamiento del operator[] como:

Devuelve una referencia al objeto que está asociado con una clave en particular. Si el mapa no contiene ya un objeto de este tipo, el operator[] inserta el tipo de datos predeterminado del objeto data_type() .

(La documentación de SGI STL no es documentación de la Biblioteca estándar de C ++, pero sigue siendo un recurso inestimable, ya que la mayoría de los comportamientos de los contenedores de la Biblioteca estándar es el mismo o muy cercano al comportamiento de los contenedores de SGI STL).


std::map operator[] inserta el tipo de valor construido por defecto en el mapa si la clave proporcionada para la búsqueda no existe. Así obtendrá una cadena vacía como resultado de la búsqueda.