在C++ 11的unordered_map中,如何更新特定键的值?

Far*_*way 22 unordered-map c++11

在Java的hashmap中:

map.put(key, new_value) 
Run Code Online (Sandbox Code Playgroud)

将使用new_value更新key = key的条目(如果它存在于hashmap中).

在C++ 11的unordered_map中执行类似操作的正确方法是什么?

我没有找到类似updateXXX的API,文档说unordered_map :: insert函数只有在没有任何这样的密钥对时才会成功.

Yuu*_*shi 33

如果您知道密钥在映射中,则可以使用operator[]它返回对映射值的引用.因此它会map[key] = new_value.但是要小心,因为(key, new_value)如果地图中不存在该键,则会插入一个.

您还可以使用find返回值的迭代器:

auto it = map.find(key)
if(it != map.end()) 
    it->second = new_value;
Run Code Online (Sandbox Code Playgroud)

  • @jturcotte对`*it`的解引用操作将返回一个引用,对于`unordered_map <K,T>`,它将是`std :: pair <const K,T>&`.因此修改`it-> second`将修改存储在容器中的值. (5认同)
  • 或者 `std::unordered_map::at`。如果指定“key”的元素不存在,它将抛出“std::out_of_range”异常。 (2认同)
  • @Yeclipse那是因为你正在使用`const_iterator` - 这意味着迭代器"指向"的是`const`(也就是说,它不能被改变).将它修改为`unordered_map :: iterator it = map.find(key)`并且它将起作用 - 这就是`auto`将其推断为. (2认同)
  • 第二部分是错误的,“ it-&gt; second”不是参考。为其分配值将不会更新地图中的值,而只会更新迭代器的值副本。 (2认同)