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:
- El mapa contiene esta clave. Así se devolverá el valor clave correspondiente.
- El mapa no contiene la clave. En este caso, agregará
automatically add a key
al mapa conkey 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 objetodata_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.