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