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 *** ...
随机推荐
- 关于Spring配置 (Cannot find class [org.apache.commons.dbcp.BasicDataSource] 问题)
myeclipse抛出异常 org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find /webapps/t ...
- 最近看到一篇cell点击时的动画,感觉还不错
http://blog.csdn.net/cloudox_/article/details/51262827
- 博客换了,比较少用这个博客(http://loid.cf)
新博客地址: http://loid.cf/
- Android 中文 API (40) —— RatingBar
Android 中文 API (40) —— RatingBar 前言 本章内容是 android.widget.RatingBar,译为"评分条",版本为Android 2.2 ...
- 深入浅出 RPC - 浅出篇
近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用.在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序员会感觉 RPC 比较神 ...
- eclipse打包 jar文件,中文乱码解决方案
直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以通过以下方法解决: 修改Eclipse中文本文件的默认编码:windows->Pref ...
- Windows下Node.js开发环境搭建-合适的开发环境
1)生产环境中的Node.js应用 Windows + Linus 2)虚拟机工具 VirtualBox 虚拟机CentOS安装 3)xShell与xFtp(windows到linux文件传输) 4) ...
- css行高line-height的用法(转)
本文导读: “行高“指一行文子的高度,具体来说是指两行文子间基线间的距离.在CSS,line-height被用来控制行与行之间的垂直距离.line- height 属性会影响行框的布局.在应用到一个块 ...
- C# Socket传输大文件
1.基础类TransferFiles,client和server都需要 using System; using System.Collections.Generic; using System.Tex ...
- ORACLE基本SQL语句-添加更新数据函数篇
一.添加数据 /*添加数据*/insert into STU values('stu0004','赵一',18,1,"kc0004");insert into STU(STU_ID ...