对于 C++ unordered_map,如果它是新的,我如何添加一个键值对,如果它的键已经存在,我如何将一个函数应用于该值?
For a C++ unordered_map, how can I add a key-value pair if it's new, and apply a function to the value if it's key already exists?
鉴于:
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
}
my_map["some_key"] += some_float;
这将值初始化浮点数 (即将其设置为 0.0f) 如果它尚不存在。然后它会添加 some_float
到它(无论它是否存在)。
鉴于:
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
}
my_map["some_key"] += some_float;
这将值初始化浮点数 (即将其设置为 0.0f) 如果它尚不存在。然后它会添加 some_float
到它(无论它是否存在)。