我想所有项目迭代中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