【问题标题】: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?对于 C++ unordered_map,如果它是新的,我如何添加一个键值对,如果它的键已经存在,我如何将一个函数应用于该值?
【发布时间】:2015-05-18 11:55:26
【问题描述】:

给定:

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
}

【问题讨论】:

  • 虽然本杰明的回答解决了您的问题,但如果值初始化不是您想要的,您的解决方案将尽可能简短/优雅。你可以将最后两行写成一行,added.first-&gt;second += my_pair.second;,但并不是每个人都同意它提高了可读性。

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


【解决方案1】:
my_map["some_key"] += some_float;

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

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 2020-12-10
    • 2011-01-10
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2019-11-01
    • 2021-11-20
    • 2023-03-16
    相关资源
    最近更新 更多