Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

multimap::erase

公众成员函数  <map>
C++98 (1)
     void erase (iterator position);
(2)
size_type erase (const key_type& K);
(3)
     void erase (iterator first, iterator last);

删除元素

multimap容器中移除单个元素或一组元素([first,last))。

通过删除元素的数量减少了容器的大小,这些元素被销毁.

☲  参数


position
指向要从multimap中删除的单个元素的迭代器。
成员类型iteratorconst_iterator是指向元素的双向迭代器类型。
K
要从映射中删除的元素的键。所有具有等价于this键的元素都将从容器中删除。

成员类型key_type是容器中元素的类型,在multimap中定义为其第一个模板参数(Key)的别名。
first, last
在multimap容器中指定要删除的范围的迭代器:[first,last)。即,范围包含firstlast之间的所有元素, 包括first所指向的元素,但不包括last所指向的元素。

成员类型iteratorconst_iterator是指向元素的双向迭代器类型。

☉  返回值



对于key-based的版本(2),该函数返回被删除的元素个数。

成员类型size_type是一个unsigned整型。
C++98
其他版本不返回值。
C++11
其他版本返回一个迭代器,指向最后一个被删除元素后面的元素 (如果最后一个元素被删除,则返回multimap::end)。
成员类型iterator是指向元素的双向迭代器类型。

☣  示例



// erasing from multimap
#include <iostream>
#include <map>

int main ()
{
  std::multimap<char,int> mymultimap;

  // insert some values:
  mymultimap.insert(std::pair<char,int>('a',10));
  mymultimap.insert(std::pair<char,int>('b',20));
  mymultimap.insert(std::pair<char,int>('b',30));
  mymultimap.insert(std::pair<char,int>('c',40));
  mymultimap.insert(std::pair<char,int>('d',50));
  mymultimap.insert(std::pair<char,int>('d',60));
  mymultimap.insert(std::pair<char,int>('e',70));
  mymultimap.insert(std::pair<char,int>('f',80));

  std::multimap<char,int>::iterator it = mymultimap.find('b');

  mymultimap.erase (it);                     // erasing by iterator (1 element)

  mymultimap.erase ('d');                    // erasing by key (2 elements)

  it=mymultimap.find ('e');
  mymultimap.erase ( it, mymultimap.end() ); // erasing by range

  // show content:
  for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
    std::cout << (*it).first << " => " << (*it).second << '\n';

  return 0;
}

输出:
a => 10
b => 30
c => 40

✥ 复杂度



对于第一个版本(erase(position)),平摊常量。
对于第二个版本(erase(val)),容器大小为对数,删除的元素数量为线性。
对于最后一个版本(erase(first,last)),first和last之间的距离是线性的。

☣ 迭代器的有效性



指向被函数移除元素的迭代器、指针和引用将失效。
所有其他迭代器、指针和引用保持其有效性。

⇄ 数据竞争


容器修改。
删除的元素被修改。并发地访问或修改其他元素是安全的,但迭代包含已删除元素的范围则不安全。

☂ 异常安全性



除非容器的比较对象抛出异常,否则该函数永远不会抛出异常(无抛出保证)。
否则,如果要删除单个元素,在发生异常时容器中不会发生任何变化(强保证)。
否则,容器将保证以有效状态结束(基本保证)。
如果指定了无效的位置或范围,则会导致未定义的行为。

🍄  另请参阅



multimap::clear 清除内容(公众成员函数)
multimap::insert 插入元素(公众成员函数)
multimap::find 获取元素迭代器(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图