对于C ++ unordered_map,如果它是新的,如何添加键值对,如果它的键已经存在,则将该函数应用于该值?

时间:2015-03-16 11:24:38

标签: c++ c++11 stl unordered-map

假设:

unordered_map<string, float> my_map

还有一对:

auto my_pair = make_pair("some_key", some_float);

如果some_key不存在,如何有效地将对插入地图,
如果some_key确实存在,则自动将some_float添加到密钥的现有值?

我目前的解决方案(或缺乏解决方案,肯定有一种更优雅的方式):

auto added = my_map.emplace(my_pair); 
if(!added.second) { // my_key already has an associated value
    auto &curr_value = *my_map.first; // pointer to the existing pair
    curr_value.second += my_pair.second; // add some_float
}

1 个答案:

答案 0 :(得分:10)

my_map["some_key"] += some_float;

这将初始化float (即设置为0.0f)(如果它尚不存在)。然后它会向其添加some_float(无论它是否存在)。