Tengo un tipo de valor que quiero poner en un mapa. Tiene un buen constructor de copia predeterminado, pero no tiene un constructor predeterminado.¿Cómo se debería usar std :: map con un valor que no tiene un constructor predeterminado?
Creo que siempre que me mantenga alejado de usar operator[]
que todo estará bien.
Sin embargo, termino con construcciones bastante feas como esta para insertar un objeto. (creo que la inserción simplemente falla si ya hay un valor para esa clave).
// equivalent to m[5]=x but without default construction
std::map<int,X>::iterator it = m.find(5);
if(it != m.end())
{
m->second = x;
}
else
{
m->insert(std::make_pair(5,x));
}
Lo que creo escaneará el mapa dos veces, y también se ve bastante feo.
¿Hay alguna manera más clara/más eficiente de hacer esto?
existente respuesta aquí http://stackoverflow.com/questions/1409454/c-map-find-to-possibly-insert-how-to-optimize-operations – miaout17
@ miaout17, sí, la respuesta existente lo resolverá. Sin embargo, la pregunta que se resuelve es un problema diferente de la OMI. –
@ miaout17, en realidad eso no lo resuelve del todo. Ese es el caso donde no almacena un nuevo valor en el mapa si ya existe uno. Pero no lo escriba con un nuevo valor. Las funciones deben ser modificadas ligeramente para hacer eso ... Alguien publicó una solución que lo hizo correctamente y luego borró su respuesta :( –