2013-04-30 632 views
16

在Java的HashMap的:如果在HashMap中存在在C++ 11的unordered_map中,如何更新特定键的值?

map.put(key, new_value) 

将更新键=键与NEW_VALUE的条目。

什么是做类似的事情,在C++ 11 unordered_map正确的方法是什么?

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

回答

21

如果您知道,关键是在地图上,你可以利用operator[]返回到映射值的参考。因此它将是map[key] = new_value。但是,请注意,如果密钥尚未存在于地图中,将会插入(key, new_value)

您还可以使用find它返回一个迭代值:

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

或'的std :: unordered_map :: at'。如果指定'key'的元素不存在,它将抛出'std :: out_of_range'异常。 – soon 2013-04-30 04:19:44

+0

谢谢!我使用了'unordered_map :: const_iterator it = map.find(key)',并且在尝试将'new_value'赋值给'it-> second'时出错。 'auto'完美无缺。我需要了解更多关于C++的知识。 – Faraway 2013-04-30 04:40:37

+1

@Yeclipse这是因为你使用了一个'const_iterator' - 这意味着迭代器“指向”的是'const'(也就是说它不能被改变)。将它修改为'unordered_map :: iterator it = map.find(key)',它将起作用 - 这就是'auto'推导出来的。 – Yuushi 2013-04-30 04:53:40

2

我认为Java的map.put插入的元素,如果它是不是已经在地图,更新它,如果它是在地图上见put



公共五世说(K键,V值)

将指定的值与此映射中指定的键关联。如果地图先前包含密钥的映射,则旧值将被替换。

这将相当于unordered_map::operator[]

若k容器中的元件的密钥相匹配,则该函数返回到其映射值的引用。

。如果k不匹配的容器中的任何元素的键,功能插入具有该键的新元素,并返回到它的映射值的引用。请注意,即使没有为元素分配映射值(该元素使用其默认构造函数构造),它始终会将容器大小增加1。