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

C++ unordered_map emplace 和emplace_hint方式

发布时间:2022-07-15 19:46:20 所属栏目:语言 来源:互联网
导读:和前面学的 map、set 等容器一样,C++ 11 标准也为 unordered_map 容器新增了 emplace() 和 emplace_hint() 成员方法,本节将对它们的用法做详细的介绍。 我们知道,实现向已有 unordered_map 容器中添加新键值对,可以通过调用 insert() 方法,但其实还有
  和前面学的 map、set 等容器一样,C++ 11 标准也为 unordered_map 容器新增了 emplace() 和 emplace_hint() 成员方法,本节将对它们的用法做详细的介绍。
 
  我们知道,实现向已有 unordered_map 容器中添加新键值对,可以通过调用 insert() 方法,但其实还有更好的方法,即使用 emplace() 或者 emplace_hint() 方法,它们完成“向容器中添加新键值对”的效率,要比 insert() 方法高。
  至于为什么 emplace()、emplace_hint() 执行效率会比 insert() 方法高,可阅读《为什么emplace()、emplace_hint()执行效率比insert()高》一文,虽然此文的讲解对象为 map 容器,但就这 3 个方法来说,unordered_map 容器和 map 容器是一样的。
 
  unordered_map emplace()方法
  emplace() 方法的用法很简单,其语法格式如下:
  template <class... Args>
      pair<iterator, bool> emplace ( Args&&... args );
 
  其中,参数 args 表示可直接向该方法传递创建新键值对所需要的 2 个元素的值,其中第一个元素将作为键值对的键,另一个作为键值对的值。也就是说,该方法无需我们手动创建键值对,其内部会自行完成此工作。
 
  另外需要注意的是,该方法的返回值为 pair 类型值,其包含一个迭代器和一个 bool 类型值:
  当 emplace() 成功添加新键值对时,返回的迭代器指向新添加的键值对,bool 值为 True;
  当 emplace() 添加新键值对失败时,说明容器中本就包含一个键相等的键值对,此时返回的迭代器指向的就是容器中键相同的这个键值对,bool 值为 False。
 
  举个例子:
  #include <iostream>
  #include <string>
  #include <unordered_map>
  using namespace std;
  int main()
 
  举个例子:
  #include <iostream>
  #include <string>
  #include <unordered_map>
  using namespace std;
  int main()
  {
      //创建 umap 容器
      unordered_map<string, string> umap;
      //定义一个接受 emplace_hint() 方法的迭代器
      unordered_map<string,string>::iterator iter;
      //调用 empalce_hint() 方法
      iter = umap.emplace_hint(umap.begin(),"STL教程", "http://c.biancheng.net/stl/");
      //输出 emplace_hint() 返回迭代器 iter 指向的键值对的内容
      cout << "iter ->" << iter->first << " " << iter->second << endl;
      return 0;
  }
  程序执行结果为:
  iter ->STL教程 http://c.biancheng.net/stl/

(编辑:大连站长网)

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