我想所有項目迭代中std::multimap
(所有所有鍵的值),並刪除滿足某個條件的所有條目:遍歷的std :: multimap中刪除某些條目
#include <map>
typedef int KEY_TYPE;
typedef int VAL_TYPE;
bool shouldRemove(const KEY_TYPE&, const VAL_TYPE&);
void removeFromMap(std::multimap<KEY_TYPE,VAL_TYPE>& map){
for (auto it = map.begin(); it != map.end(); it++){
if (shouldRemove(it->first,it->second))
map.erase(it);
}
}
迭代工程除非第一個項目被刪除,並且拋出了以下錯誤,則:
地圖/套迭代器不遞增的
哪有removeFromMap
函數被重寫以正常工作?該代碼應該適用於地圖的各種鍵和值類型。
我使用C++ 11和Visual Studio 2013年
通常,使用map.erase(iterator)的返回值,因爲它會將迭代器返回到下一個元素或結束,如果它是最後一個元素 – AquilaRapax
@Erbureth您應該將其添加爲答案:-) –
@ KarlNicoll然而,深入挖掘之後,Erase-remove成語不適用於'std :: set','std :: map'和朋友,因爲它們的值類型不是'MoveAssignable'。我不知道如何在這種容器上實現它,因爲它通過轉換元素來工作。 – Erbureth