how example ejemplo delete c++ map

example - how to fill a map c++



Error al intentar encontrar la clave const char*de std:: map (1)

Tengo un mapa declarado así:

std::map<const char*, const char*> map2D;

El mapa se completa con el resultado de una función API, que devuelve const char* :

map2D.insert(std::pair<const char*, const char*>(TempA, TempB));

Ahora hay 50 valores TempA y 50 valores TempB , y hay una clave con el nombre de "meses". Cuando estoy buscando esta clave, me "no encuentro". P.ej:

std::map<const char*, const char*>::iterator it; it = map2D.find("months"); if (it != map2D.end()) { std::cout << "Found " << it->first << " " << it->second << ''/n''; } else { std::cout << "Not found/n"; }

Pero cuando lo hago así:

map2D.insert(std::pair<const char*, const char*>("months", "June");

Puedo encontrar el mes respectivo. Después de buscar en la web, entiendo que este problema puede estar relacionado con el uso de const char* . ¿Alguien más puede aclarar esto?


Comparar dos const char* para la igualdad no hace lo que crees que hace; compara valores de punteros, no las cadenas a las que apuntan los punteros. Con los literales de cadena, esto puede ocasionalmente "funcionar", pero no hay manera de saber que dos literales de cadena, incluso con los mismos caracteres, se almacenarán en la misma dirección. Tendría que proporcionar un comparador personalizado que invoca strcmp , para hacer que ese trabajo sea confiable.

Está mucho mejor con std::map<std::string, std::string> . No importa que su API de terceros le proporcione const char* : simplemente puede construir std::string s a partir de esos.

Este contenedor tendrá elementos con una clara propiedad y semántica de duración, y se ordenará de forma automática. En resumen, todos tus problemas simplemente desaparecerán.

Si todavía necesita almacenar const char* , tenga en cuenta que tal requisito es extremadamente raro y solo debe considerarse fugazmente si está dispuesto a ensuciar su código con comentarios explicativos que detallan cómo y por qué su contenedor es seguro; sugerencia: es casi seguro que no.