C++ Reference: Standard C++ Library reference: Containers: map: map: erase

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或范围无效,则会导致未定义的行为。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值