std::
map::erase
公众成员函数 <map>
C++98 |
(1) |
void erase (iterator position); |
|
(2) |
size_type erase (const value_type& K); |
|
(3) |
void erase (iterator first, iterator last); |
C++11 |
(1) |
iterator erase (const_iterator position); |
|
(2) |
size_type erase (const value_type& K); |
|
(3) |
iterator erase (const_iterator first, const_iterator last); |
删除元素
从
map容器中移除单个元素或一组元素(
[first,last))。
通过删除元素的数量减少了容器的大小,这些元素被销毁.
☲ 参数
-
position
-
指向要从映射中删除的单个元素的迭代器。
这将指向一个有效的、可解除引用的元素。
成员类型iterator和const_iterator是指向元素的双向迭代器类型。
-
K
-
要从映射中删除的元素的键。
成员类型key_type是容器中元素的类型,在map中定义为其第一个模板参数(Key)的别名。
-
first, last
-
在map容器中指定要删除的范围的迭代器:[first,last)。即,范围包含first和last之间的所有元素,
包括first所指向的元素,但不包括last所指向的元素。
成员类型iterator和const_iterator是指向元素的双向迭代器类型。
☉ 返回值
对于
key-based的版本(2),该函数返回被删除的元素个数。
成员类型
size_type是一个
unsigned整型。
-
C++98
-
其他版本不返回值。
-
C++11
-
其他版本返回一个迭代器,指向最后一个被删除元素后面的元素
(如果最后一个元素被删除,则返回map::end)。
成员类型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;
} |
输出:
a => 10
d => 40
✥ 复杂度
对于第一个版本(erase(position)),平摊常量。
对于第二个版本(erase(val)),容器大小为对数。
对于最后一个版本(erase(first,last)),first和last之间的距离是线性的。
☣ 迭代器的有效性
指向被函数移除元素的迭代器、指针和引用将失效。
所有其他迭代器、指针和引用保持其有效性。
⇄ 数据竞争
容器修改。
删除的元素被修改。并发地访问或修改其他元素是安全的,但迭代包含已删除元素的范围则不安全。
☂ 异常安全性
除非容器的比较对象抛出异常,否则该函数永远不会抛出异常(无抛出保证)。
否则,如果要删除单个元素,在发生异常时容器中不会发生任何变化(强保证)。
否则,容器将保证以有效状态结束(基本保证)。
如果指定了无效的位置或范围,则会导致未定义的行为。
🍄 另请参阅
map::clear |
清除内容(公众成员函数) |
map::insert |
插入元素(公众成员函数) |
map::find |
获取元素迭代器(公众成员函数) |