std::map中函数用法集合
1 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点
2 eg:
3 map<string,string> mapTest;
4 typedef map<string,string>::iterator ITER;
5 ITER iter=mapTest.find(key);
6 mapTest.erase(iter);
7 像上面这样只是删除单个节点,map的形为不会出现任务问题,
8 但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念.
9 像下面这样的一个例子就是错误的写法,
10 eg.
11 for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter)
12 {
13 cout<<iter->first<<":"<<iter->second<<endl;
14 mapTest.erase(iter);
15 }
16 这是一种错误的写法,会导致程序行为不可知.究其原因是map 是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代
器就失效了,不应该再被使用;否则会导致程序无定义的行为。
17 可以用以下方法解决这问题:
18 正确的写法
19 1.使用删除之前的迭代器定位下一个元素。STL建议的使用方式
20 for(ITER iter=mapTest.begin();iter!=mapTest.end();) //注意此处不能再写iter++
21 {
22 cout<<iter->first<<":"<<iter->second<<endl;
23 mapTest.erase(iter++); //++在后的话,则先把iter++的值保存在一个临时变量中,执行完该语句之后,再把该临时变量赋给iter;
//++在前的话,则没有产生临时变量,直接将iter+1的值赋给iter;
24 }
25 2. erase() 成员函数返回下一个元素的迭代器
26 for(ITER iter=mapTest.begin();iter!=mapTest.end();)
27 {
28 cout<<iter->first<<":"<<iter->second<<endl;
29 iter=mapTest.erase(iter);
30 }
map中的find(key),返回值,
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
std::map中函数用法集合的更多相关文章
- string.h文件中函数用法
下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source) ...
- python中函数用法
unique() numpy.tolist() collections.defaultdict() random.sample()[] 1. unique():返回参数数组中所有不同的值,并按照从小到 ...
- List中函数用法 First,FirstOrDefault,Single,SingleOrDefault的区别
操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...
- map中的erase成员函数用法
转载于 http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html http://hi.baidu.com/sdkinger/it ...
- c++ 中map 的find 函数用法
Map中,find函数用来定位数据出现位置,当含有该数据,即查找成功时,返回数据所在未知的迭代器, 如果查找失败,则返回end()函数所在的迭代器,因此用是否等于end来判断是否查找成功. 程序示例: ...
- STL之std::set、std::map的lower_bound和upper_bound函数使用说明
由于在使用std::map时感觉lower_bound和upper_bound函数了解不多,这里整理并记录下相关用法及功能. STL的map.multimap.set.multiset都有三个比较特殊 ...
- C++中map的介绍用法以及Gym题目:Two Sequences
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可能称为该关键字的值(value))的数据 处理能力,由于这个特性,它完成有可能 ...
- C++ std::map::erase用法及其陷阱
1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...
- ES6中map和set用法
ES6中map和set用法 --转载自廖雪峰的官方网站 一.map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Arra ...
随机推荐
- MYSQL 引擎的情况
方法 1: show engine innodb status; ------------------------------------------------------------------- ...
- Open source and free log analysis and log management tools.
Open source and free log analysis and log management tools. Maintained by Dr. Anton Chuvakin Version ...
- 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
最近一直在看大家在讨论sandisk,pny,金士顿等大厂都开始用tlc的芯片问题,让大家基本都不敢用U盘存数据了按照之前的擦写参数TLC 1000次MLC 10000次SL ...
- css之float
在 HTML中的所有对象,默认分为两种:块元素(block element).内联元素(inline element),虽然也存在着可变元素,但只是随上下文关系确定该元素是块元素或者内联元素. 其实C ...
- C++ Primer 读书笔记 第2章 变量和基本类型
C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...
- sql存储过程的简单使用
存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 创建 ...
- ubuntu 64位设置兼容32位 for ADB 命令无法运行
在虚拟机上Ubuntu系统里安装ADT开发工具,配置好环境后导入Android工程报错: 找不到Adb命令: ubuntu 12.04 64位设置兼容32位的实现REF:http://www.2cto ...
- iis 配置php
1.CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一种语 ...
- vue.js自定义指令入门
Vue.js 允许你注册自定义指令,实质上是让你教 Vue 一些新技巧:怎样将数据的变化映射到 DOM 的行为.你可以使用Vue.directive(id, definition)的方法传入指令id和 ...
- C++类的常成员函数
让一个成员函数带上常量性是什么意思呢?通常的答案是,一个常成员函数不会更改其class对象.这是一种平凡的表述,而编译器实现的手法也相当平凡. 任何非静态成员函数其实都被编译器隐式插入了一个指针类型的 ...