Quantcast
Channel: C++博客-所有随笔
Viewing all articles
Browse latest Browse all 7882

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

$
0
0
在好多不负责任的博客中普及了一些错误的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/

Stone xin 2013-05-03 11:29 发表评论

Viewing all articles
Browse latest Browse all 7882

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>