在Java的HashMap的:如果在HashMap中存在在C++ 11的unordered_map中,如何更新特定鍵的值?
map.put(key, new_value)
將更新鍵=鍵與NEW_VALUE的條目。
什麼是做類似的事情,在C++ 11 unordered_map正確的方法是什麼?
我還沒有找到像updateXXX這樣的API,並且文檔說unordered_map :: insert函數只有在沒有任何這樣的密鑰對時纔會成功。
在Java的HashMap的:如果在HashMap中存在在C++ 11的unordered_map中,如何更新特定鍵的值?
map.put(key, new_value)
將更新鍵=鍵與NEW_VALUE的條目。
什麼是做類似的事情,在C++ 11 unordered_map正確的方法是什麼?
我還沒有找到像updateXXX這樣的API,並且文檔說unordered_map :: insert函數只有在沒有任何這樣的密鑰對時纔會成功。
如果您知道,關鍵是在地圖上,你可以利用operator[]
返回到映射值的參考。因此它將是map[key] = new_value
。但是,請注意,如果密鑰尚未存在於地圖中,將會插入(key, new_value)
。
您還可以使用find
它返回一個迭代值:
auto it = map.find(key)
if(it != map.end())
it->second = new_value;
我認爲Java的map.put
插入的元素,如果它是不是已經在地圖,更新它,如果它是在地圖上見put:
把
公共五世說(K鍵,V值)
將指定的值與此映射中指定的鍵關聯。如果地圖先前包含密鑰的映射,則舊值將被替換。
這將相當於unordered_map::operator[]:
若k容器中的元件的密鑰相匹配,則該函數返回到其映射值的引用。
。如果k不匹配的容器中的任何元素的鍵,功能插入具有該鍵的新元素,並返回到它的映射值的引用。請注意,即使沒有爲元素分配映射值(該元素使用其默認構造函數構造),它始終會將容器大小增加1。
或'的std :: unordered_map :: at'。如果指定'key'的元素不存在,它將拋出'std :: out_of_range'異常。 – soon 2013-04-30 04:19:44
謝謝!我使用了'unordered_map :: const_iterator it = map.find(key)',並且在嘗試將'new_value'賦值給'it-> second'時出錯。 'auto'完美無缺。我需要了解更多關於C++的知識。 – Faraway 2013-04-30 04:40:37
@Yeclipse這是因爲你使用了一個'const_iterator' - 這意味着迭代器「指向」的是'const'(也就是說它不能被改變)。將它修改爲'unordered_map :: iterator it = map.find(key)',它將起作用 - 這就是'auto'推導出來的。 – Yuushi 2013-04-30 04:53:40