Tengo un mapa desordenado que almacena el int como clave un puntero como valor. Necesito verificar la existencia de la clave. Si la clave no está disponible, necesito insertar la clave y el valor. ¿Cuál es el mejor enfoque?Pregunta básica al asignar valor a unordered_map
Gracias.
unordered_map<int, classA*>testMap;
classA* ptr = testMap[1];
if(ptr == NULL)
testMap[1] = new classA;
OR
unordered_map<int, classA*>::iterator it = testMap.find(1);
if(it == testMap.end())
{
testMap.insert(make_pair(1, new classA));
}
Le sugiero que almacene sus instancias 'classA' creadas dinámicamente en' std :: shared_ptr': 'std :: unordered_map>'. Puede crear las instancias usando 'std :: make_shared (... ctr params ...)'. Esto lo libera de las preocupaciones de las filtraciones de recursos. –
El primer enfoque o la variante que evita la segunda búsqueda podría ser mejor si puede asegurarse de que nunca tenga punteros nulos válidos en el mapa. Sin embargo, como no has declarado esa condición previa, yo elegiría el segundo enfoque seguro. Puede usar la función count() en lugar de buscar y/o deshacerse de la variable local it para borrar el código. –