map遍历元素删除

map遍历删除元素与vector和list遍历删除不一样:

直接上代码:

template<typename T>
void vecDelElem(vector<T> *vect, T elem)
vector遍历删除正确方法:

 1 {
 2         typename vector<T>::iterator iter;
 3         for(iter=(*vect).begin(); iter!=(*vect).end(); )
 4         {
 5                 if(*iter == elem)
 6                 {
 7                         iter = (*vect).erase(iter);
 8                 }
 9                 else
10                 {
11                         iter++;
12                 }
13         }
14 }

 

所以联想到map的遍历删除,代码如下:

 

 1 for (map<pair<int, int>, vector<int> >::iterator iter = seqLinkMap.begin(); iter != seqLinkMap.end(); )
 2         {
 3                 if ( XXXXX )
 4                 {
 5                         iter = seqLinkMap.erase(iter);
 6                 }
 7                 else
 8                 {
 9                         iter++;
10                 }
11         }

 

编译一直报错:

error: no match for ‘operator=’ in ‘iter = seqLinkMap.std::map<_Key, _Tp, _Compare, _Alloc>::erase [with _Key = std::pair<int, int>, _Tp = std::vector<int>, _Compare = std::less<std::pair<int, int> >, _Alloc = std::allocator<std::pair<const std::pair<int, int>, std::vector<int> > >, std::map<_Key, _Tp, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const std::pair<int, int>, std::vector<int> > >](iter)’

原来根据STL std::map中的定义void erase(iterator pos),此erase并不返回下一个元素的迭代器,因此不能采用std::list的方法。

正确的方法是:

 

 1 for (map<pair<int, int>, vector<int> >::iterator iter = seqLinkMap.begin(); iter != seqLinkMap.end(); )
 2         {
 3                 if (XXXX)
 4                 {
 5                         seqLinkMap.erase(iter++);
 6                 }
 7                 else
 8                 {
 9                         iter++;
10                 }
11         }

 

 

 

转载于:https://www.cnblogs.com/shijun-xiao/p/3619259.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值