Ответ 1
Вы просто делаете (для map
и unordered_map
)
mydict[key]=value;
В настоящее время у меня много кода, который выглядит так:
std::unordered_map<int,int> my_dict;
.
.
.
// If the key does exist in the dictionary
if(my_dict.count(key) == 1){
my_dict[key] = value;
}
// If its a new key
else{
my_dict.insert(std::make_pair(key,value));
}
Есть ли способ ускорить это, просто перезаписывая значение каждый раз?
Вы просто делаете (для map
и unordered_map
)
mydict[key]=value;
Я думаю, что это может быть быстрее всего:
auto it = my_dict.find(key);
if( it != my_dict.end() ) {
*it = value;
}
else {
my_dict.insert(std::make_pair(key,value));
}
таким образом вы не изменяете структуру unordered_map
, если key
уже существует, и у вас есть только один поиск.
Другой вариант, если вам не нужен/доступ value
после этого:
my_dict[key] = std::move(value);
Это может быть лучше в тех случаях, когда присвоение value
является дорогостоящим и имеет преимущества от семантики перемещения.