С чем-то вроде следующего фрагмента:
std::map<Key, Value>::iterator i = amap.find(key);
if (i == amap.end())
amap.insert(std::make_pair(key, CreateFunction()));
else
UpdateFunction(&(i->second));
Если вы хотите измерить что-то, что может улучшить производительность, вы можете использовать .lower_bound()
, чтобы найти, где находится запись, и использовать ее как подсказку для вставки в случае, когда вам нужно вставить новый объект.
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));