在好多不負責任的博客中普及了一些錯誤的map刪除元素的方法。
現(xiàn)在給出糾正。
首先,map的erase方法有三種形式
(1) |
void erase (iterator position);
|
(2) |
size_type erase (const key_type& k);
|
(3) |
void erase (iterator first, iterator last);
|
第3種沒有什么歧義,不用細說了。
最有歧義的就是第一種和第二種。
有返回值的接口,是刪除key為參數(shù)的。返回值是刪除的數(shù)量。因為map中key不會重復,所以,如果key存在,則返回的是1,否則,返回是0;
如果是調(diào)用的iter接口,則刪除的是迭代器位置的元素。
如果只刪除一個元素,直接 map.erase(iter);就好了。
如果用循環(huán)。
while(iter!=map.end)
{
if(condition)
{
map.erase(iter++);
}else{
++iter;
}
}
官方手冊地址:
http://www.cplusplus.com/reference/map/map/erase/