数据加载中……

【原创】正确使用map的erase方法【修正版】

在好多不负责任的博客中普及了一些错误的map删除元素的方法。
现在给出纠正。

首先,map的erase方法有三种形式

(1)
 void erase (iterator position); 
(2)
     size_type erase (const key_type& k); 
(3)
 void erase (iterator first, iterator last);

第3种没有什么歧义,不用细说了。
最有歧义的就是第一种和第二种。

有返回值的接口,是删除key为参数的。返回值是删除的数量。因为map中key不会重复,所以,如果key存在,则返回的是1,否则,返回是0;

如果是调用的iter接口,则删除的是迭代器位置的元素。
如果只删除一个元素,直接 map.erase(iter);就好了。
如果用循环。
while(iter!=map.end)
{
    if(condition)
   {
      map.erase(iter++);
   }else{
      ++iter;   
   }
}
官方手册地址:
http://www.cplusplus.com/reference/map/map/erase/

posted on 2013-05-03 11:29 Stone xin 阅读(1905) 评论(0)  编辑 收藏 引用 所属分类: STL&&BOOST


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理