关闭

C++map遍历删除数据(删除被2整除的键值对)

标签: C++map遍历删除数据
602人阅读 评论(1) 收藏 举报
分类:

C++使用迭代器遍历删除数据时 调用erase函数后,原先的迭代器不能使用了,故应该在之前先做处理。

以前关于遍历删除本人都是使用一个vector来存储相关的key后,然后再删除,不过这样的效率确实不高,被朋友提点有效率好点的方法后,试了下以前以为会出错的方法,也对关联类的迭代器有了进一步认识吧,对这个迭代器先做偏移,取原先迭代器的作为移除点事其实是可行的。

以下windows,linux都测试通过

/*author:  Jeson Yang
 date:	2015.11.18
 file:	****.cpp*/
#include <iostream>
#include <map>
using namespace std;

int main()
{
  map<int, int> *mapValue = new map<int, int>();
  mapValue->insert(make_pair(2, 1));
  mapValue->insert(make_pair(3, 1));
  mapValue->insert(make_pair(4, 1));
  for (std::map<int, int>::iterator it = mapValue->begin(); it != mapValue->end(); )
  {
    int key = it->first;
    if (key % 2 == 0)
    {
      mapValue->erase(it++);
    }
    else
    {
      ++it;
    }
  }

  for (std::map<int, int>::iterator it = mapValue->begin(); it != mapValue->end(); ++it)
  {
    cout << it->first << "  value = " << it->second << endl;
  }

  delete mapValue;
  mapValue = NULL;

  return 0;
}


 


 

by:Jeson Yang

 

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:53659次
    • 积分:533
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:24篇
    • 译文:0篇
    • 评论:52条
    文章分类