C++官网参考链接:https://cplusplus.com/reference/map/map/erase/
公有成员函数
<map>
std::map::erase
C++98
(1) void erase (iterator position);
(2) size_type erase (const key_type& k);
(3) void erase (iterator first, iterator last);
C++11
(1) iterator erase (const_iterator position);
(2) size_type erase (const key_type& k);
(3) iterator erase (const_iterator first, const_iterator last);
删除元素
从map容器中删除单个元素或元素范围([first,last))。
这通过删除元素的数量有效地减少了容器的size。
形参
position
指向要从map中删除的单个元素的iterator。
这应指向一个有效和可解引用的元素。
成员类型iterator和const_iterator是指向元素的双向iterator(bidirectional iterator)类型。
k
要从map中删除的元素的键。
成员类型key_type是容器中元素的类型,在map中定义为其第一个模板形参(Key)的别名。
first,last
在map容器中指定要删除的范围的iterator:[first,last)。也就是说,范围包括first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
成员类型iterator和const_iterator是指向元素的双向iterator(bidirectional iterator)类型。
返回值
对于基于键的版本(2),函数返回被删除的元素数量。
成员类型size_type是无符号整型。
C++98
其他版本不返回值。
C++11
其他版本返回一个iterator,指向最后一个被删除的元素后面的元素(或者map::end,如果最后一个元素被删除)。
成员类型iterator是指向元素的双向iterator(bidirectional iterator)类型。
用例
// erasing from map
#include <iostream>
#include <map>
int main ()
{
std::map<char,int> mymap;
std::map<char,int>::iterator it;
// insert some values:
mymap['a']=10;
mymap['b']=20;
mymap['c']=30;
mymap['d']=40;
mymap['e']=50;
mymap['f']=60;
it=mymap.find('b');
mymap.erase (it); // erasing by iterator
mymap.erase ('c'); // erasing by key
it=mymap.find ('e');
mymap.erase ( it, mymap.end() ); // erasing by range
// show content:
for (it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
return 0;
}
输出:
复杂度
对于第一个版本(erase(position)),平摊常量。
对于第二个版本(erase(val)),容器的size中的对数。
对于最后一个版本(erase(first,last)),first和last之间的距离中的线性。
iterator的有效性
指向被函数删除的元素的iterators、pointers和references将失效。
所有其他iterators、pointers和references都保持它们的有效性。
数据竞争
完成容器的修改。
删除的元素被修改。同时访问其他元素是安全的,但迭代容器中的范围就不安全了。
异常安全
除非容器的比较对象(comparison object)抛出,否则此函数从不抛出异常(无抛出保证)。
否则,如果要删除单个元素,则在异常情况下容器中不会有任何更改(强保证)。
否则,保证容器以有效状态结束(基本保证)。
如果指定的position或范围无效,则会导致未定义的行为。