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. SQL Server MySQL 中的 in 与 null

    例子: create table t(x int,y int); insert into t(x,y) values(1,1),(2,2),(null,null); 查询一: select x,y f ...

  2. 如何获取浏览器的DNS解析时间

    上一篇博客提到09年初WED团队开发的浏览器环境检测工具时,忘记说这个是aoao同学的创意了.不过没关系,据说他又在秘密规划新版本了,再据说新版要增加的DNS解析时间计算已经开发完成,点上面那个链接就 ...

  3. uestc 10 In Galgame We Trust

    题意:求最长的合法括号序列 解:栈+分类讨论 now表示已经算出的序列,且此序列与现在扫描的序列可能能够连接,tmp表示现在扫描到的序列长度 左括号入栈 右括号:1.栈空时:统计当前总长 并且将栈,n ...

  4. Android 4.2启动代码分析(一)

    Android系统启动过程分析 Android系统的框架架构图如下(来自网上):   Linux内核启动之后----->就到Android的Init进程 ----->进而启动Android ...

  5. 2013 多校联合 F Magic Ball Game (hdu 4605)

    http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...

  6. css中的media

    说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...

  7. Win32下C++遍历目录和文件的源码

    #include<windows.h> #include<iostream> #include<string> using namespace std; //只能处 ...

  8. 指定hive输出格式

    0.11版本以前: sed -e 's/\x01/|/g' file 0.11版本以后: insert overwrite local directory '/opt/aimcpro/libc/tes ...

  9. C# XML与Json之间相互转换

    XML转换为Json字符串  在代码中预定义的一个xml字符串,如下: string xml = @"<?xml version=""1.0"" ...

  10. Unity StrangeIoc框架 (三)signal信号方式

    先创建TestRoot using UnityEngine; using System.Collections; using strange.extensions.context.impl; publ ...