У меня есть MAP, которая необязательно имеет тип std :: map и, необязательно, типа unordered_map (в соответствии с typdef MAP), и функция, которая добавляет значение к указанному ключевому значению:
func1(MAP<string, double> &map, string &key, double &val2add){
try
{
map.at(key) += val2add;
}catch(out_of_range& oor){
map[key] = val2add; // in case map[key] didn't exist before.
}
}
Проблема в том, что это означает двойную (и, возможно, даже больше) работу, чем просто
func2(MAP<string, double> &map, string &key, double &val2add){
map[key] += val2add; // if map[key] doesn't exist - problem
}
Но вышеописанное не сработает, поскольку, как я понимаю, оператор [] инициализирует новый объект на карте с заданным ключом и двойным значением по умолчанию. Если бы я знал, что двойное значение по умолчанию равно 0, то func2 все равно достиг бы того, чего я хочу - но я не могу на это полагаться.
Так есть ли способ использовать [] лучше, чем func1?