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. CentOS下Mysql安装调试

    一.安装   yum安装:yum install -y mysql-server mysql mysql-devel 设置自启动:chkconfig mysqld on 启动MySQL:service ...

  2. 编写一个程序实现strcpy函数的功能

    #include <stdio.h> #include <string.h> #define N 5 char *mycpy(char *s1, char *s2) { //数 ...

  3. ENVISAT卫星及ASAR数据介绍

    摘要: ENVISAT卫星是欧空局的对地观测卫星系列之一,于2002年3月1日发射升空.该卫星是欧洲迄今建造的最大的环境卫星.星上载有10种探测设备,其中4种是ER S-1/2所载设备的改进型,所载最 ...

  4. MMC卡是什么

    MMC卡(Multimedia Card) 翻译成中文为“多媒体卡”.是一种快闪存储器卡标准.在1997年由西门子及SanDisk共同开发,技术基于东芝的NAND快闪记忆技术,因此较早期基于Intel ...

  5. 深入理解java虚拟机---读后笔记(垃圾回收)

    运行时数据区,主要包括方法区.虚拟机栈.本地方法栈.堆.程序计数器,该部分内存都是线程隔离的. 然后和其交互的有执行引擎.本地库接口,此部分线程之间是可以共享的. 1. 引用计数算法 给对象添加一个引 ...

  6. Hat's Fibonacci(大数,好)

    Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. iOS开发-object-c之 @[], @{}

    今天看别人代码的时候发现这样的用法 navigationController.viewControllers = @[secondViewController]; 这里用到了@[]. 刚开始不是很明白 ...

  8. jquery 点击按钮实现listbox的显示与隐藏,点击其他地方按钮外的地方,隐藏listbox

    本来不知道如何获取服务器的控件的,这下知道可以这么做了,所以记录下来.... <asp:ImageButton ID="alltime" ImageUrl="ima ...

  9. SQL学习之组合查询(UNION)

    1.大多数的SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回.这些组合查询通常称为并或复合查询. ...

  10. 转载 LayoutInflater的inflate函数用法详解

    http://www.open-open.com/lib/view/open1328837587484.html LayoutInflater的inflate函数用法详解 LayoutInflater ...