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

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

给定:

unordered_map<string, float> my_map

还有一对:

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

如果 some_key 不存在,我如何有效地将对插入到 map 中,
如果 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;

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

关于c++ - 对于 C++ unordered_map,如果它是新的,我如何添加一个键值对,如果它的键已经存在,我如何将一个函数应用于该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075631/

相关文章:

C++ 套接字和压力测试

c++ - 如何修复此错误 `conversion from const_iterator to non-scalar type`?

c++ - 将 const 添加到 size_t 会导致编译失败是标准行为吗?

c++ - std::unordered_map - Inserting elements is “attempting to reference a deleted function”

iphone - unique_ptr与Iphone sdk?

c++ 重载 < 在 C++ 中对多个类使用友元函数?

c++ - 如何在 C++ 中使用字符的 ascii 代码创建 std::wstring?

c++ - 使用回调函数从构造函数调用虚拟/派生方法的替代方法?

c++ - CRTP vs 过载和最终

c++ - 自定义迭代器运算符重载