加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C++ STL unordered_map删去元素 erase 和clear

发布时间:2022-07-15 14:36:50 所属栏目:语言 来源:互联网
导读:C++ STL 标准库为了方便用户可以随时删除 unordered_map 容器中存储的键值对,unordered_map 容器类模板中提供了以下 2 个成员方法: erase():删除 unordered_map 容器中指定的键值对; clear():删除 unordered_map 容器中所有的键值对,即清空容器。 本
  C++ STL 标准库为了方便用户可以随时删除 unordered_map 容器中存储的键值对,unordered_map 容器类模板中提供了以下 2 个成员方法:
  erase():删除 unordered_map 容器中指定的键值对;
  clear():删除 unordered_map 容器中所有的键值对,即清空容器。
 
  本节就对以上 2 个成员方法的用法做详细的讲解。
  unordered_map erase()方法
  为了满足不同场景删除 unordered_map 容器中键值对的需要,此容器的类模板中提供了 3 种语法格式的 erase() 方法。
 
  1) erase() 方法可以接受一个正向迭代器,并删除该迭代器指向的键值对。该方法的语法格式如下:
  iterator erase ( const_iterator position );
 
  其中 position 为指向容器中某个键值对的迭代器,该方法会返回一个指向被删除键值对之后位置的迭代器。
 
  举个例子:
  #include <iostream>
  #include <string>
  #include <unordered_map>
  using namespace std;
  int main()
  {
      //创建 umap 容器
      unordered_map<string, string> umap{
          {"STL教程", "http://c.biancheng.net/stl/"},
          {"Python教程", "http://c.biancheng.net/python/"},
          {"Java教程", "http://c.biancheng.net/java/"} };
      //输出 umap 容器中存储的键值对
      for (auto iter = umap.begin(); iter != umap.end(); ++iter) {
          cout << iter->first << " " << iter->second << endl;
      }
      cout << "erase:" << endl;
      //定义一个接收 erase() 方法的迭代器
      unordered_map<string,string>::iterator ret;
      //删除容器中第一个键值对
      ret = umap.erase(umap.begin());
      //输出 umap 容器中存储的键值对
      for (auto iter = umap.begin(); iter != umap.end(); ++iter) {
          cout << iter->first << " " << iter->second << endl;
      }
      cout << "ret = " << ret->first << " " << ret->second << endl;
      return 0;
  }
  程序执行结果为:
  STL教程 http://c.biancheng.net/stl/
  Python教程 http://c.biancheng.net/python/
  Java教程 http://c.biancheng.net/java/
  erase:
  Python教程 http://c.biancheng.net/python/
  Java教程 http://c.biancheng.net/java/
  ret = Python教程 http://c.biancheng.net/python/
 
  可以看到,通过给 erase() 方法传入指向容器中第一个键值对的迭代器,该方法可以将容器中第一个键值对删除,同时返回一个指向被删除键值对之后位置的迭代器。
  注意,如果erase()方法删除的是容器存储的最后一个键值对,则该方法返回的迭代器,将指向容器中最后一个键值对之后的位置(等同于 end() 方法返回的迭代器)。
 
 
  2) 除了支持删除 unordered_map 容器中指定的某个键值对,erase() 方法还支持一次删除指定范围内的所有键值对,其语法格式如下:
  iterator erase ( const_iterator first, const_iterator last );
 
  其中 first 和 last 都是正向迭代器,[first, last) 范围内的所有键值对都会被 erase() 方法删除;同时,该方法会返回一个指向被删除的最后一个键值对之后一个位置的迭代器。

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!