2

复制:

如果在从头到尾迭代时在地图元素上调用擦除会发生什么

如何从标准映射中过滤项目

我有一张地图map1<string,vector<string>>我有这个地图“itr”的迭代器。我想从这个地图中删除“itr”指向的条目。我可以使用函数 map1.erase(itr); 在这一行之后,迭代器“itr”变得无效。根据我在项目中的要求,迭代器必须指向下一个元素。任何人都可以帮我提前注册这个:) santhosh

4

4 回答 4

5

您可以在将迭代器作为参数传递给擦除时对迭代器进行后增量:

myMap.erase(itr++)

这样,itr在擦除之前指向的元素被删除,并且迭代器递增以指向映射中的下一个元素。如果您在循环中执行此操作,请注意不要将迭代器增加两次。

另请参阅类似问题的此答案,或对此问题的回应。

于 2008-11-06T15:18:29.073 回答
2
map<...>::iterator tmp(iter++);
map1.erase(tmp);
于 2008-11-06T14:51:10.063 回答
1

简单的答案:

map.erase(iter++);  // Post increment. Increments iterator,
                    // returns previous value for use in erase method

之前问过并回答过:
如果在从头到尾迭代时在地图元素上调用擦除会发生什么
如何从标准映射中过滤项目

于 2008-11-06T18:15:37.890 回答
0
#include <boost/next_prior.hpp>

map<string,vector<string> >::iterator next = boost::next(itr);
map1.erase(iter);
iter = next;
于 2008-11-06T14:56:43.453 回答