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循环遍历删除的更多相关文章

  1. map/vector遍历删除

    map遍历删除 map<int, vector<int>>::iterator it = g_map.begin(); for (; it != g_map.end(); /* ...

  2. stl map高效遍历删除的方法 [转]

    for(:iter!=mapStudent.end():) {      if((iter->second)>=aa)      {          //满足删除条件,删除当前结点,并指 ...

  3. stl map高效遍历删除的方法

    for(:iter!=mapStudent.end():) {      if((iter->second)>=aa)      {          //满足删除条件,删除当前结点,并指 ...

  4. Java 循环遍历删除set list中的元素

    删除List和Set中的某些元素 错误代码的写法: Set<String> set = new HashSet<String>(); set.add("aaaaaa& ...

  5. map循环遍历

    data.map(function(item){ item.show = false; //将拿到的data循环给每一项添加show属性 });

  6. 【C++】关于map的遍历 删除

    int main(int argc, char* argv[]) { map<string, string> mapData; mapData["a"] = " ...

  7. set循环遍历删除特定元素

    使用Iterator迭代器 public class Demo { public static void main(String[] args) { Set<Object> obj = n ...

  8. ArrayList循环遍历并删除元素的几种情况

    如下代码,想要循环删除列表中的元素b,该怎么处理? public class ListDemo { public static void main(String[] args) { ArrayList ...

  9. ES5 map循环一大坑:循环遍历竟然出现逗号!

    一.map map大法好 这里需要解释一下Map和forEach的区别 一般来说需要返回值时使用Map,而只需要循环的使用forEach map循环常用的一些方法 /********* ES6 *** ...

随机推荐

  1. java并发编程--Runnable Callable及Future

    1.Runnable Runnable是个接口,使用很简单: 1. 实现该接口并重写run方法 2. 利用该类的对象创建线程 3. 线程启动时就会自动调用该对象的run方法 通常在开发中结合Execu ...

  2. JAVA的RSA加密算法工具类

    须要用到一个jar http://www.bouncycastle.org/latest_releases.html 须要注意的问题 JS用同一秘钥生成的密文用java解密出来是逆序的,即js加密12 ...

  3. Linux下配置免安装版Tomcat

    一.下载免安装版Tomcat 打开Tomcat主页http://tomcat.apache.org/,下载Tomcat免安装版,我这里下载的是apache-tomcat-7.0.2.tar.gz. 二 ...

  4. SQL Profile 总结(一)

    一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...

  5. iOS-BLE蓝牙开发持续更新

    文/煜寒了(简书作者)原文链接:http://www.jianshu.com/p/84b5b834b942著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在写这个博客之前,空余时间抽看 ...

  6. 如何查看Android SDK源码版本

    PLATFORM_VERSION := 4.2.2 位于/build/core/version_defaults.mk # # Copyright (C) 2008 The Android Open  ...

  7. c - 对数组进行排序(通过指针的指针)

    通过指针的指针,以及一个指针数组,对实际数组元素进行排序,有一个优点,就是排序过程交换的只有指针数组中的值,而不是实际的数组的元素.当实际元素中的对象很大,特别是结构体等类型时,这样做是很有好处. 下 ...

  8. shell获取日期(昨天,明天,上月,下月)

    今天 sh-4.1$ echo `date +%Y-%m-%d` 2016-08-17 昨天 sh-4.1$ echo `date -d "last day" +%Y-%m-%d` ...

  9. 【warning】clang the linker unused

    这个问题是 我在写第一个 mac os 下的helloworld遇到的 就像是 大家写第一个java中的 helloworld 肯定也是要在命令窗口下进行操作 一样 为了让一些和我一样的刚入门的孩子学 ...

  10. Google map实现类似Google earth的图标展开功能

    前言 在Google map的开发时,如果有多个图标重叠在一起,这时下面的图标就点击不到.而在Google Earth中,鼠标一移到上面就会自动弹开,这对于用户而言是十分人性化的一个功能.如下是在Go ...