删除映射中的特定条目,但迭代器必须指向删除后的下一个元素

delete a specific entry in the map,but the iterator must point to the next element after the deletion

本文关键字:删除 元素 下一个 迭代器 映射      更新时间:2023-10-16

重复:

如果在从开始到结束的迭代过程中对地图元素调用擦除,会发生什么

如何从stdmap中筛选项目

我有一个映射CCD_ 1;itr";。我想从这个映射中删除由";itr";。我可以使用函数map1.erase(itr);在这一行之后;itr";变得无效。根据我在项目中的要求,迭代器必须指向下一个元素。有人能帮我整理一下吗thans提前:)桑托什

您可以在将迭代器作为参数传递给erase:的同时增加迭代器

myMap.erase(itr++)

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

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

map<...>::iterator tmp(iter++);
map1.erase(tmp);

简单答案:

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

之前询问和回答:
如果在从开始到结束迭代时对map元素调用erase,会发生什么
如何从stdmap中筛选项目

#include <boost/next_prior.hpp>
map<string,vector<string> >::iterator next = boost::next(itr);
map1.erase(iter);
iter = next;