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

时间:2013-04-30 03:55:23

标签: c++11 unordered-map

在Java的hashmap中:

map.put(key, new_value) 

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

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

我还没有找到像updateXXX这样的API,并且文档说 unordered_map :: insert 函数只有在没有任何这样的密钥对时才会成功。

4 个答案:

答案 0 :(得分:28)

如果您知道密钥在地图中,则可以使用operator[]返回对映射值的引用。因此它将是map[key] = new_value。但请注意,如果地图中尚不存在该键,则会插入(key, new_value)

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

auto it = map.find(key)
if(it != map.end()) 
    it->second = new_value;

答案 1 :(得分:0)

我认为Java map.put插入了元素(如果它已经不在地图中)并在地图中更新了它,请参阅 put

  

放入   
  公共V放(K键,V值)
  
  将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

这相当于unordered_map::operator[]

  

如果k匹配容器中元素的键,则该函数返回对其映射值的引用。
  
  如果k与容器中任何元素的键不匹配,则该函数将使用该键插入一个新元素,并返回对其映射值的引用。请注意,即使没有为元素指定映射值(使用其默认构造函数构造元素),这也总是会将容器大小增加1。

答案 2 :(得分:0)

如果类型value没有默认构造函数,则可以使用:

map.emplace(key, new_value).first->second = new_value;

这还具有emplace与[]运算符和insert的所有其他优点。

答案 3 :(得分:0)

  1. 检查密钥是否存在
  2. 通过引用键更新值
if(map.count(key)){
  map[key] = value;
}