zoukankan      html  css  js  c++  java
  • map的遍历删除

           题目:已知map<string,int> m,要求删除其中值大于10的元素。

           这里关键之一是遍历,二是删除。

           代码如下:

           void mapOpt(map<string,int> *m)
           {
                map<string,int>::iterator it;
                it = m->begin();
                while(it != m->end())
                {
                    if (it->second > 10)
                    {
                         m->erase(it++);
                    }
                    else
                    {
                         it++;
                    }
               }
            }

            这里一定要注意,迭代器失效问题。如果用for(it = m->begin(); it != m->end(); ++it),然后调用m->erase(it)。那就错了。这样删除后迭代失效了,不能再继续遍历了。

          但用while可以,是因为m->erase(it++);,it已经被指向下一个元素了,删除的是上一个元素。

          测试代码:

         map<string,int>  m;
         m["a"]=1;
         m["b"]=2;
         m["c"]=3;
         m["d"]=11;
         m["e"]=3;
         m["f"]=31;

         mapOpt(&m);

         map<string,int>::iterator it;
         for(it=m.begin();it!=m.end();++it)
         {
             cout<<"key: "<< (it->first).c_str() <<" value: "<<it->second<<endl;
         }

         如预期正确。

         

  • 相关阅读:
    微软职位内部推荐-Senior Development Lead
    微软职位内部推荐-Senior Program Manager
    微软职位内部推荐-Senior PM
    微软职位内部推荐-Principal Software Eng Mgr
    微软职位内部推荐-Senior Software Engineer
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL慢日志查询
    spark运行模式
    scala+hadoop+spark环境搭建
    MySQL Sleep进程
  • 原文地址:https://www.cnblogs.com/wangchenggen/p/3562051.html
Copyright © 2011-2022 走看看