跳到主要内容

std::multimap erase() 方法

// (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) 移除 pos 位置的元素。
  • (2) 移除范围 [ first; last ) 内的元素,该范围必须是 *this 中的有效范围。
  • (3) 移除(如果存在)键等于 key 的元素。
  • (4) 移除键与值 x 比较等效的元素(如果存在)。此重载仅在限定 ID Compare::is_transparent 有效且表示一个类型,并且 iteratorconst_iterator 都不能从 K 隐式转换时才参与重载决议。它允许在不构造 Key 实例的情况下调用此函数。
失效

指向已擦除元素的引用迭代器会失效。其他引用和迭代器不受影响。

重要

迭代器 pos 必须是有效可解引用的。因此 end() 迭代器(有效但不可解引用)不能用作 pos 的值。

参数

  • pos - 指向要移除元素的迭代器
  • first, last - 要删除的元素范围
  • key - 要移除元素的键值
  • x - 可以与键透明比较的任何类型的值,表示要移除的元素

返回值

  • (1-2)
    指向最后一个被删除元素之后的迭代器。
  • (3,4) 移除的元素数量(01)。

异常

  • (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::multimap<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
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。

std::multimap erase() 方法

// (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) 移除 pos 位置的元素。
  • (2) 移除范围 [ first; last ) 内的元素,该范围必须是 *this 中的有效范围。
  • (3) 移除(如果存在)键等于 key 的元素。
  • (4) 移除键与值 x 比较等效的元素(如果存在)。此重载仅在限定 ID Compare::is_transparent 有效且表示一个类型,并且 iteratorconst_iterator 都不能从 K 隐式转换时才参与重载决议。它允许在不构造 Key 实例的情况下调用此函数。
失效

指向已擦除元素的引用迭代器会失效。其他引用和迭代器不受影响。

重要

迭代器 pos 必须是有效可解引用的。因此 end() 迭代器(有效但不可解引用)不能用作 pos 的值。

参数

  • pos - 指向要移除元素的迭代器
  • first, last - 要删除的元素范围
  • key - 要移除元素的键值
  • x - 可以与键透明比较的任何类型的值,表示要移除的元素

返回值

  • (1-2)
    指向最后一个被删除元素之后的迭代器。
  • (3,4) 移除的元素数量(01)。

异常

  • (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::multimap<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
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。