Я недавно видел изменение в запросе на удаление. Мне интересно, дает ли это какое-либо улучшение.
Ниже приведена упрощенная версия.
...
std::map<int, std::string> myMap;
... // map will get updated
void foo(int key, std::string value)
{
myMap[key] = value; // <-- this line gets changed
}
Помеченная отдельная строка была изменена следующим образом.
auto entry = myMap.find(key);
if (entry == myMap.end())
{
myMap.insert(std::make_pair(key, value));
}
else
{
entry->second = value;
}
ВозможноНамерение состояло в том, чтобы избежать создания объекта, если key
отсутствует (что кажется допустимым). Но не создается ли подобный временный объект в вызове insert()
? Или здесь происходит какая-то оптимизация?
На мой взгляд, обе версии должны иметь одинаковую производительность. Но будет улучшение, если вместо insert()
будет использоваться emplace()
.
Может ли кто-нибудь уточнить это, если мое понимание неверно?