先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是:

map.erase有3个重载:
void erase ( iterator position );
size_type erase ( const key_type& x );
void erase ( iterator first, iterator last );

所以下面的代码中的最后一个例子仅仅可以在windows下的map下运行。

STL的map表里有一个erase方法用来从一个map中删除掉指令的节点
eg1:

map<string,string> mapTest;
typedef map<string,string>::iterator ITER;

ITER iter=mapTest.find(key);
mapTest.erase(iter);

像上面这样只是删除单个节点,map的形为不会出现任务问题,
但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念.
像下面这样的一个例子就是错误的写法,
eg2:

for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter);
}

这是一种错误的写法,会导致程序行为不可知.究其原因是map 是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。
可以用以下方法解决这问题:
正确的写法
1.使用删除之前的迭代器定位下一个元素。STL建议的使用方式

for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter++);
}

2. erase() 成员函数返回下一个元素的迭代器

for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
iter=mapTest.erase(iter);
}

正确使用stl map的erase方法相关推荐

  1. STL map::find 使用方法简单例子

    map中的find方法主要用于查找,给定key,可以返回该元素的对应迭代器,然后利用这个迭代器访问value内容. //map::find #include <iostream> #inc ...

  2. stl string的erase方法

    for (i = 0; i < s.size(); i++){if (s[i] == '0'){s.erase(i,1);i--;}} 删除string中的所有0. 转载于:https://ww ...

  3. STL中用erase()方法遍历删除元素

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...

  4. stl map高效遍历删除的方法

    for(:iter!=mapStudent.end():) { if((iter->second)>=aa) { //满足删除条件,删除当前结点,并指向下面一个结点 mapStudent. ...

  5. STL vector的erase操作问题

    STL vector的erase操作问题 一老大说CSDN上有篇博文("关于STL vector的erase操作",地址是:http://blog.csdn.net/tingya/ ...

  6. STL map 简介

    STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...

  7. C++ STL map的使用

    C++ STL map的使用   2009-12-11 作者:tanker1024 来源:tanker1024的blog   1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的 ...

  8. STL map常用操作简介

    1.目录 map简介 map的功能 使用map 在map中插入元素 查找并获取map中的元素 从map中删除元素 2.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除 ...

  9. C++ STL map的使用和性能分析

    1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操 作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 ...

最新文章

  1. 企业研发管理工具应用分析
  2. 非常好的bert中文预训练资料
  3. 会议室分配时间最长_论文导论动态任务分配GPU上图计算的高效处理方式
  4. 解决Ubuntu下切换到root用户后没有声音问题
  5. WebApp的前端所遇问题
  6. fastjson 添加key value_FastJson迁移至Jackson
  7. html静态页面跳转传值,在静态页面html中跳转传值
  8. from表单requried属性效果
  9. 自动化遍历-appcrawler
  10. ecshop中$user对象
  11. 恒强制版系统980_恒功率、大功率及无线充电,充电设备面临哪些趋势和挑战?...
  12. GitHub上13个Spring Boot 优质开源项目!超53K星,一网打尽!
  13. 飞桨领航团AI达人创造营第一课2021.7.26
  14. PHP反序列化详解(二)——PHP魔术方法与PHP反序列化漏洞
  15. c语言中文定义什么类型,typedef在c语言中是什么意思?
  16. _putw、putc、puts和putchar应用差别
  17. java毕业设计二手交易系统Mybatis+系统+数据库+调试部署
  18. 2019.01.11【BZOJ3308】【ProjectEuler335】 九月的咖啡店/Maximal coprime subset(费用流)
  19. 树莓派python驱动PCA9685
  20. ASR、TTS语音相关

热门文章

  1. notes系统服务器地址,notes怎么连接服务器地址
  2. oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
  3. 修改.html 打开方式 注册表,windows 注册表修改资料打开方式
  4. 20220201--CTF刷题MISC方向--第5题
  5. lol转服务器维护,LOL转区系统活动_LOL转区系统活动地址_玩游戏网
  6. logincontroller.java_ucenter整合java项目,注册问题
  7. mac上java文件如何编译_如何在Mac上用Java编译和运行程序?
  8. pingfangsc字体_2020-iOS GUI-字体规范
  9. [AT2567] [arc074_c] RGB Sequence
  10. poj2464扫描线好题,树状数组解法