Подтвердить что ты не робот

Каков самый быстрый способ вставки/обновления элементов std:: unordered_map без использования if?

В настоящее время у меня много кода, который выглядит так:

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));
}

Есть ли способ ускорить это, просто перезаписывая значение каждый раз?

4b9b3361

Ответ 1

Вы просто делаете (для map и unordered_map)

mydict[key]=value;

Ответ 2

Я думаю, что это может быть быстрее всего:

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 является дорогостоящим и имеет преимущества от семантики перемещения.