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 ...
随机推荐
- jni note
2016-1-15 javah 使用javah可以自动从java文件生成jni头文件, 用法:javah [选项] <类> 其中 [选项] 包括: -help ...
- FAQ:Python 断点调试
Python程序调试:断点调试是必须有的功能,以Pycharm开发工具为例: 一.理论知识: 1. step into(F7)就是单步执行,遇到子函数就进入并且继续单步执行: 2 step over ...
- 自写的LastPos,寻找字符串里的最后一个字符,RTL里没有提供这个函数——Delphi的String下标是从1开始的
已经好几次了,没有这个函数还是感觉很不方便,所以自己写了一个: function LastPos(strFind :string; ch: Char): integer; var i, n: inte ...
- Fibonacci(数论 输出前四位Fibonacci)
Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【Android进阶学习】shape和selector的结合使用
shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...
- 解决.net中截取字符串的汉字与数字还有静态扩展方法
转载 http://blog.163.com/cn_dreamgo/blog/static/52679452200961033212407/ 这两天在C#编程中应用到C#代码与C的代码信息交互,但 ...
- C# 颜色有3种表示方式: 6位16进制、RGB、 颜色关键字
最常用的是6位16进制的代码表示法.如bgcolor=#ff0000;其中#只是表示使用6位16进制的颜色代码声明颜色.代码的头两位即ff表示三原色中的红色,范围当然是16进制的00-ff,中间两位即 ...
- oracle 导入txt
没有Oraclehoume的情况下,执行下环境变量文件 sqlldr userid= DM/DM control = /home/oracle/libc/load.ctl load data infi ...
- PHP删除HTMl标签
/** * 取出html标签 * * @access public * @param string str * @return string * */ function deletehtml($str ...
- Oracle Select into 用Sql server替换
--Oracle: DECLARE n_count int; begin Select count(*) into n_count from from M_Test where ENTITYLSH = ...