map循环遍历删除
typedef map<string,int> MapFileList;
int main()
{
MapFileList m_SingleList;
m_SingleList.insert(MapFileList::value_type("ttt", 0));
m_SingleList.insert(MapFileList::value_type("ddd", 1));
m_SingleList.insert(MapFileList::value_type("kkk", 0));
if (m_SingleList.size()>0)//是否保存了文件
{
MapFileList::iterator tIter;
int flag = 0;
/*该写法是错误的,陷入了循环中
for(tIter = m_SingleList.begin(); tIter != m_SingleList.end(); tIter++)
{
cout<<tIter->first<<" -- "<<tIter->second<<endl;
flag = tIter->second;
if(flag> 0 )
{
cout<<"erase "<<endl;
m_SingleList.erase(tIter);
}
}
*/ for(tIter = m_SingleList.begin(); tIter != m_SingleList.end();)
{
flag = tIter->second;
if (flag>0)
m_SingleList.erase(tIter++);
else
{
(*tIter).second = 1;
++tIter;
}
}
/* 这个写法也可以通过的
for(tIter = m_SingleList.begin(); tIter != m_SingleList.end();)
{
flag = tIter->second;
if (flag>0)
tIter = m_SingleList.erase(tIter);
else
{
(*tIter).second = 1;
++tIter;
}
}*/ }
}
分析:
在std::list中删除一个元素非常简单,直接使用erase方法即可,代码如下:
for(iter = list.begin(); iter != list.end();) {
if (shouldDelete(*iter))
iter = list.erase(iter);
else
++iter;
}
或者更简单点
list.erase(std::remove_if(list.begin(), list.end(), shouldDelete), list_end());
然而根据STL std::map中的定义void erase(iterator pos),此erase并不返回下一个元素的迭代器,因此不能采用std::list的方法
for(iter = map.begin(); iter != map.end();) {
if (shouldDelete(*iter))
map.erase(iter++);
else
++iter;
}
当然此方法同样也适合于std::list等
map循环遍历删除的更多相关文章
- map/vector遍历删除
map遍历删除 map<int, vector<int>>::iterator it = g_map.begin(); for (; it != g_map.end(); /* ...
- stl map高效遍历删除的方法 [转]
for(:iter!=mapStudent.end():) { if((iter->second)>=aa) { //满足删除条件,删除当前结点,并指 ...
- stl map高效遍历删除的方法
for(:iter!=mapStudent.end():) { if((iter->second)>=aa) { //满足删除条件,删除当前结点,并指 ...
- Java 循环遍历删除set list中的元素
删除List和Set中的某些元素 错误代码的写法: Set<String> set = new HashSet<String>(); set.add("aaaaaa& ...
- map循环遍历
data.map(function(item){ item.show = false; //将拿到的data循环给每一项添加show属性 });
- 【C++】关于map的遍历 删除
int main(int argc, char* argv[]) { map<string, string> mapData; mapData["a"] = " ...
- set循环遍历删除特定元素
使用Iterator迭代器 public class Demo { public static void main(String[] args) { Set<Object> obj = n ...
- ArrayList循环遍历并删除元素的几种情况
如下代码,想要循环删除列表中的元素b,该怎么处理? public class ListDemo { public static void main(String[] args) { ArrayList ...
- ES5 map循环一大坑:循环遍历竟然出现逗号!
一.map map大法好 这里需要解释一下Map和forEach的区别 一般来说需要返回值时使用Map,而只需要循环的使用forEach map循环常用的一些方法 /********* ES6 *** ...
随机推荐
- jquery 滚动条 scroll 和 animate出现的问题总结
这两天刚刚学习了jquery就想把平时做看到的一些相关效果用新的知识写写看.知识平时看着都懂,实际操作中问题才会层出不穷. <!DOCTYPE html> <html> < ...
- Linux下那些奇葩的命令
相信喜爱编程,痴迷技术的你,肯定接触过甚至深爱着linux,甚至可能已经很熟悉linux了,可是linux那逗比的一面,你又知道多少. 本文!纯粹娱乐!不喜勿喷! 1.程序猿的愤慨! yes 当我们再 ...
- HDU 4099 Revenge of Fibonacci (数学+字典数)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4099 这个题目就是一个坑或. 题意:给你不超过40的一串数字,问你这串数字是Fibonacci多少的开头 ...
- android源代码百度网盘分享
转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46334123 本文出自:[yujun411522的博客] 近期在使用Ubunt ...
- netstat 命令详解
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息,在我的计算机上执行netstat后,其输出结果为:netstat命令是一 ...
- docker iptables 端口映射 nat
docker iptables 端口映射 nat #!/bin/bash pro='tcp' NAT_Host='Host_A' NAT_Port=8080 Dst_Host='Host_B' ...
- c#.net防止按F5刷新页面重复提交的方法
在网上购物的过程中,提交完一个页面后,如果此时按f5刷新,则会弹出一个提示:如果继续,则会重新发送提交我们刚才提交的内容,这个问题应该规避掉,不然总是重复提交付款,那可不是件好事. 在c#.net中的 ...
- XenServer 使用笔记
XenServer 模拟千兆网卡 这两天用 XenServer 安装 VM,其中一台 VM 是用作无盘测试的 Linux Server,不在主流发行版之列,无奈 XenServer 日前对非主流的 L ...
- Task与Thread间的区别
通过查找一些文章,得知,Task与Thread不可比.Task是为了利用多CPU多核的机制而将一个大任务不断分解成小任务,这些任务具体由哪一个线程或当前线程执行由OS来决定.如果你想自己控制由哪一个T ...
- win7 重启 IIS.
步骤 1,打开 "控制面板",并将右上角的"查看方式"设置为 "大/小图标". 2,选择 "管理工具": 3,打开 In ...