std::map erase() 方法
- 自 C++23 起
- 自 C++11 起
- 直到 C++11
// (1) Non const version only
iterator erase( iterator pos );
iterator erase( const_iterator pos );
// (2) Non const version only
iterator erase( iterator first, iterator last );
// (3) Non const version only
size_type erase( const Key& key );
// (4) Non const version only
template< class K >
size_type erase( K&& x );
// (1) Non const version only
iterator erase( iterator pos );
iterator erase( const_iterator pos );
// (2) Non const version only
iterator erase( iterator first, iterator last );
// (3) Non const version only
size_type erase( const Key& key );
// (1) Non const version only
void erase( iterator pos );
// (2) Non const version only
void erase( iterator first, iterator last );
// (3) Non const version only
size_type erase( const Key& key );
从容器中移除指定的元素。
- (1) 移除
pos
位置的元素。 - (2) 移除范围 [ first; last ) 内的元素,该范围必须是
*this
中的有效范围。 - (3) 移除(如果存在)键等于
key
的元素。 - (4) 删除键与值
x
比较等效的元素(如果存在)。此重载仅当限定 idCompare::is_transparent
有效且表示一个类型,并且iterator
和const_iterator
都不能隐式转换为K
时才参与重载解析。它允许在不构造Key
实例的情况下调用此函数。
失效
指向已擦除元素的引用和迭代器会失效。其他引用和迭代器不受影响。
重要
迭代器 pos 必须是有效且可解引用的。因此,end()
迭代器(有效但不可解引用)不能用作 pos 的值。
参数
pos
- 指向要移除元素的迭代器first
,last
- 要删除的元素范围key
- 要移除元素的键值x
- 可以与键透明比较的任何类型的值,表示要移除的元素
返回值
- (1-2)
- 自 C++11 起
- 直到 C++11
指向最后一个被删除元素之后的迭代器。(无) - (3,4) 移除元素的数量(0 或 1)。
异常
- (1,2) 不抛出任何异常。
- (3,4)
Compare
对象抛出的任何异常。
复杂度
- (1) 均摊常量 - O(1)。
- (2)
log size() + std::distance(first, last)
。 - (3)
log size() + count(key)
。 - (4)
log size() + count(x)
。
备注
功能测试宏:__cpp_lib_associative_heterogeneous_erasure
(用于重载 (4))。
示例
Main.cpp
#include <map>
#include <iostream>
int main()
{
std::map<int, std::string> c = {
{1, "one" }, {2, "two" }, {3, "three"},
{4, "four"}, {5, "five"}, {6, "six" }
};
// erase all odd numbers from c
for(auto it = c.begin(); it != c.end(); ) {
if(it->first % 2 != 0)
it = c.erase(it);
else
++it;
}
for(auto& p : c) {
std::cout << p.second << ' ';
}
}
输出
two four six