正确使用STL-MAP中Erase函数
一切尽在代码中。
#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函数相关推荐
- 正确使用stl map的erase方法
先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...
- C++ STL map 中insert函数返回值问题
当map中的insert函数插入失败后,返回值应该是 **pair<iterator, bool>**型,第二个参数bool值在插入成功时返回true,失败时返回false 那么第一个返回 ...
- stl::map之const函数访问
如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const ...
- c++容器(vector|map)中使用函数指针
我要动态生成mfc菜单,动态绑定响应命令. 首先把菜单关键词和函数指针绑定在map中, 再通过关键词找到函数来执行. #include "stdafx.h" #include &l ...
- C++中erase()函数
str.erase(a,b) : 从str中删除迭代器对a和b所表示的范围中的元素,返回b. 标准库类型string表示可变长的字符序列.可以通过string类的erase()函数来对该字符序列进行删 ...
- 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 ...
- 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!
lower_bound算法返回第一个大于等于给定值所在的位置.设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置.当start和last指向相同位置 ...
- C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)
1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...
- C++ map容器和multimap容器(STL map容器)
目录 1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2 ...
最新文章
- Nginx会话保持之nginx-sticky-module模块
- IOS开发之----异常处理
- python爬虫Scrapy框架之增量式爬虫
- C语言-数据结构与其他数据形式
- 多线程爬虫python_一个简单的多线程Python爬虫
- 值得永久收藏的 C# 设计模式套路(二)
- Java SE中的Bootstrap CDI 2.0
- SIFT算法中概念简单解释
- 作者:袁晓如,北京大学“百人计划”研究员,北京大学信息科学技术学院博士生导师。...
- 自动特征工程、NAS、超参调优和模型压缩,微软开源的NNI一库搞定!
- 真正能成大事的人,往往有一个“共同特征”
- [Swift]LeetCode188. 买卖股票的最佳时机 IV | Best Time to Buy and Sell Stock IV
- java十大排序算法
- QQ也出网页版的了- WebQQ公测中
- 阿里CTO王坚:商业进化的四个关键词
- 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 12836(unattended-upgr)持有
- springboot项目调用阿里云短信接口(包括短信上行)
- Spring Data Querydsl-JPA 的简单入门笔记
- 动态生成验证码+验证码的校验
- 有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。