Con algo como el siguiente fragmento:
std::map<Key, Value>::iterator i = amap.find(key);
if (i == amap.end())
amap.insert(std::make_pair(key, CreateFunction()));
else
UpdateFunction(&(i->second));
Si desea medir algo que pueda mejorar el rendimiento, es posible que desee utilizar .lower_bound()
para encontrar una entrada y usarla como una sugerencia para insertar en el caso donde necesite insertar un nuevo objeto.
std::map<Key, Value>::iterator i = amap.lower_bound(key);
if (i == amap.end() || i->first != key)
amap.insert(i, std::make_pair(key, CreateFunction()));
// Might need to check and decrement i.
// Only guaranteed to be amortized constant
// time if insertion is immediately after
// the hint position.
else
UpdateFunction(&(i->second));
Esto puede generar código elegante, si desea insertar un objeto 'MyClass' predeterminado, y luego actualizarlo. Si necesita insertar un objeto no predeterminado, o no actualiza el valor insertado, la solución de Charles es probablemente mejor. –
'update (my_map [key])'? Eso también significa que 'update' always (que no está claro en la pregunta). – UncleBens
¿Qué pasa si la clave no existe? – Konrad