一切尽在代码中。

#include <iostream>
#include <map>
#include <string>
using namespace std ;int main(void)
{ map<int, string> m ;m.insert(pair<int, string>(1, "abc")) ;m.insert(pair<int, string>(2, "def")) ;m.insert(pair<int, string>(3, "def")) ;m.insert(pair<int, string>(4, "ghi")) ;map<int, string>::iterator itor ;// 错误的写法for (itor = m.begin(); itor != m.end(); ++itor){if (itor->second == "def"){m.erase(itor) ; // map是关联式容器,调用erase后,当前迭代器已经失效
        }}// 正确的写法for (itor = m.begin(); itor != m.end();){if (itor->second == "def"){m.erase(itor++) ; // erase之后,令当前迭代器指向其后继。
        }else{++itor;}}// 另一个正确的写法,利用erase的返回值,注意,有些版本的stl-map没有返回值,比如SGI版,但vc版的有for (itor = m.begin(); itor != m.end();){if (itor->second == "def"){itor = m.erase(itor) ; // erase的返回值是指向被删除元素的后继元素的迭代器
        }else{++itor;}}// Print mmap<int, string>::const_iterator citor ;for (citor = m.begin(); citor != m.end(); ++citor){cout << citor->first << ":" << citor->second << endl ;}getchar() ; return 0 ;
} 

本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html,如需转载请自行联系原作者

正确使用STL-MAP中Erase函数相关推荐

  1. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...

  2. C++ STL map 中insert函数返回值问题

    当map中的insert函数插入失败后,返回值应该是 **pair<iterator, bool>**型,第二个参数bool值在插入成功时返回true,失败时返回false 那么第一个返回 ...

  3. stl::map之const函数访问

    如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const ...

  4. c++容器(vector|map)中使用函数指针

    我要动态生成mfc菜单,动态绑定响应命令. 首先把菜单关键词和函数指针绑定在map中, 再通过关键词找到函数来执行. #include "stdafx.h" #include &l ...

  5. C++中erase()函数

    str.erase(a,b) : 从str中删除迭代器对a和b所表示的范围中的元素,返回b. 标准库类型string表示可变长的字符序列.可以通过string类的erase()函数来对该字符序列进行删 ...

  6. vector中erase函数

    下列代码的输出为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 include "iostream&q ...

  7. 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

    lower_bound算法返回第一个大于等于给定值所在的位置.设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置.当start和last指向相同位置 ...

  8. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

  9. C++ map容器和multimap容器(STL map容器)

    目录 1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2 ...

最新文章

  1. Nginx会话保持之nginx-sticky-module模块
  2. IOS开发之----异常处理
  3. python爬虫Scrapy框架之增量式爬虫
  4. C语言-数据结构与其他数据形式
  5. 多线程爬虫python_一个简单的多线程Python爬虫
  6. 值得永久收藏的 C# 设计模式套路(二)
  7. Java SE中的Bootstrap CDI 2.0
  8. SIFT算法中概念简单解释
  9. 作者:袁晓如,北京大学“百人计划”研究员,北京大学信息科学技术学院博士生导师。...
  10. 自动特征工程、NAS、超参调优和模型压缩,微软开源的NNI一库搞定!
  11. 真正能成大事的人,往往有一个“共同特征”
  12. [Swift]LeetCode188. 买卖股票的最佳时机 IV | Best Time to Buy and Sell Stock IV
  13. java十大排序算法
  14. QQ也出网页版的了- WebQQ公测中
  15. 阿里CTO王坚:商业进化的四个关键词
  16. 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 12836(unattended-upgr)持有
  17. springboot项目调用阿里云短信接口(包括短信上行)
  18. Spring Data Querydsl-JPA 的简单入门笔记
  19. 动态生成验证码+验证码的校验
  20. 有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。

热门文章

  1. MATLAB【十四】————遍历三层文件夹操作
  2. python数据结构与算法:单向链表
  3. php报错Permission denied
  4. 用Visual C#创建Windows服务程序
  5. String和常量池
  6. C++11容器中新增加的emplace相关函数的使用
  7. C++/C++11中头文件functional的使用
  8. Cygwin的安装及在Android jni中的简单使用举例
  9. 海思3536:osdrv编译过程中报错及解决方法
  10. matlab一元线性回归分析_建模开讲:一元线性回归分析及SPSS软件实现