如何在map遍历的时候删除符合条件的选项

本文介绍在C++中如何遍历并删除STL map中的元素,提供了两种不同的实现方式,并详细解释了每种方法的工作原理及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作了,使用STL的次数变得很多,我是新手,虽然努力的看过STL的源码,但是很多的东西都没有看懂,慢慢来吧。

昨天做项目的时候遇到了map遍历的事情查了一下便了解的记录下来。

这个删除有两种方法:

1,

                        std::map<int, FriendWidget*>::iterator iter;
for(iter=m_FriendInfoMap.begin();iter!=m_FriendInfoMap.end();)
{
if(iter->second->getSelectedState())
{
FriendModule::instance().requestFriendRemove(iter->first);
int nIndex = m_pFriendList->getIndex(iter->second);
m_pFriendList->removeItem(nIndex);


m_FriendInfoMap.erase(iter++);
}
else
{
iter++;
}
}

m_FriendInfoMap.erase(iter++);里的i++操作主要做三件事情:
1、首先把i备份一下。
2、把i加上1。
3、返回第一步备份的i。


2,

                       std::map<int, FriendWidget*>::iterator iter;
for(iter=m_ApplyInfoMap.begin();iter!=m_ApplyInfoMap.end();)
{
if(iter->second->getSelectedState())
{
FriendModule::instance().requestFriendIgnore(iter->first);
int nIndex = m_pApplyList->getIndex(iter->second);
m_pApplyList->removeItem(nIndex);


iter = m_ApplyInfoMap.erase(iter );
}
else
{
iter++;
}
}
}

在erase(iter)的时候iter会失效,所以不能再用其操作,不然会崩掉。

注意 for循环里边没有了iter++,还有就是erase的返回值是指向删除的下一个元素的迭代器,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值