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中函数用法集合的更多相关文章

  1. string.h文件中函数用法

    下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source) ...

  2. python中函数用法

    unique() numpy.tolist() collections.defaultdict() random.sample()[] 1. unique():返回参数数组中所有不同的值,并按照从小到 ...

  3. List中函数用法 First,FirstOrDefault,Single,SingleOrDefault的区别

    操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...

  4. map中的erase成员函数用法

    转载于 http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html  http://hi.baidu.com/sdkinger/it ...

  5. c++ 中map 的find 函数用法

    Map中,find函数用来定位数据出现位置,当含有该数据,即查找成功时,返回数据所在未知的迭代器, 如果查找失败,则返回end()函数所在的迭代器,因此用是否等于end来判断是否查找成功. 程序示例: ...

  6. STL之std::set、std::map的lower_bound和upper_bound函数使用说明

    由于在使用std::map时感觉lower_bound和upper_bound函数了解不多,这里整理并记录下相关用法及功能. STL的map.multimap.set.multiset都有三个比较特殊 ...

  7. C++中map的介绍用法以及Gym题目:Two Sequences

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可能称为该关键字的值(value))的数据 处理能力,由于这个特性,它完成有可能 ...

  8. C++ std::map::erase用法及其陷阱

    1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...

  9. ES6中map和set用法

    ES6中map和set用法 --转载自廖雪峰的官方网站 一.map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Arra ...

随机推荐

  1. 读Flask源代码学习Python--config原理

    读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因   莫名其妙在第一份工作中使用了从来没有接 ...

  2. Vim 缓冲区与窗口 操作

    ##############缓冲区 :e(:open) 打开新缓冲区 :ls (:buffers) 列出列表内所有缓冲区/bs /bv /be(BufExplore快捷键) :b 2(:buffer ...

  3. jQuery 之 $.get、$.post、$.getJSON、$.ajax

    对 JSTL标签 加以巩固,同时在自己的博客中与之分享: http://app.yinxiang.com/shard/s20/sh/76feadb0-957a-40bc-895d-4d28025ce2 ...

  4. 转:web前端面试题合集 (Javascript相关)(js异步加载详解)

    1. HTTP协议的状态消息都有哪些? 1**:请求收到,继续处理2**:操作成功收到,分析.接受3**:完成此请求必须进一步处理4**:请求包含一个错误语法或不能完成5**:服务器执行一个完全有效请 ...

  5. Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建

    1. Linux Mint由Linux Mint Team团队于2006年开始发行,是一份基于 这个时候linuxmint安装完成,C/C++开发环境也配置完成,希望大家认真实践!

  6. LDAP Authentication for openNebula3.2

    LDAP Authentication 3.2 The LDAP Authentication addon permits users to have the same credentials as ...

  7. saiku之固定维度(必选维度)

    工作中遇到的问题,记录下来方便以后查找. 在saiku中如何设定固定维度? 找到WorkspaceDropZone.js文件,在synchronize_query: function(){}方法中的“ ...

  8. 反恐训练营(LCS)

    反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 程序猿的量化交易之路(20)--Cointrader之Assert实体(8)

    转载需说明出处:http://blog.csdn.net/minimicall, http://cloudtrade.top 不论什么可交易的都能够称之为Assert,资产.其类代码例如以下: pac ...

  10. Android Gson深入分析

    眼下解析json有三种工具:org.json(Java经常使用的解析),fastjson(阿里巴巴project师开发的).Gson(Google官网出的).解析速度最快的是Gson,下载地址:htt ...