2013-04-30 27 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。