C++语法—— STL:unordered_map

一.介绍

1.1介绍

unordered_map是C++11正式加入的对hash_map的官方实现(之前标准C++没有hash_map的官方实现,我们使用的STL的hash_map并不是官方的)。
从名字可以看出这个结构是无序的,底层设计思想和STL的hash_map一样。元素在内部不以任何特定顺序排序,而是放进桶中。
元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。
unordered_map搜索、插入和元素移除拥有平均常数时间复杂度。

1.2头文件和结构定义
   unordered_map 容器在<unordered_map>头文件中,并位于 std 命名空间中。因此,如果想使用该容器,代码中应包含如下语句: 
#include <unordered_map>
using namespace std;
template < class Key,                        //键值对中键的类型
           class T,                          //键值对中值的类型
           class Hash = hash<Key>,           //容器内部存储键值对所用的哈希函数
           class Pred = equal_to<Key>,       //判断各个键值对键相同的规则
           class Alloc = allocator< pair<const Key,T> >  // 指定分配器对象的类型
           > class unordered_map;

以上 5 个参数中,必须显式给前 2 个参数传值,并且除特殊情况外,最多只需要使用前 4 个参数,各自的含义和功能如表 1 所示。

在这里插入图片描述

二.应用

2.1初始化

(1) 通过调用 unordered_map 模板类的默认构造函数,可以创建空的 unordered_map 容器。比如:

std::unordered_map<std::string, std::string> umap;

由此,就创建好了一个可存储 <string,string> 类型键值对的 unordered_map 容器。

(2)当然,在创建 unordered_map 容器的同时,可以完成初始化操作。比如:

std::unordered_map<std::string, std::string> umap{
   
    {
   "Python教程","http://c.biancheng.net/python/"},
    {
   "Java教程",
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::unordered_map可以通过多种方式进行初始化。其中一种方式是使用初始化列表(std::initializer_list)来初始化。这种方式允许我们在创建std::unordered_map对象时,直接提供一组键值对作为初始数据。例如,可以使用以下语法来初始化std::unordered_map对象: std::unordered_map<Key, T> myMap = { {key1, value1}, {key2, value2}, ... }; 另一种初始化std::unordered_map的方式是使用拷贝构造函数。可以将另一个已存在的std::unordered_map对象作为参数传递给拷贝构造函数,以创建一个新的std::unordered_map对象,该对象包含与原始对象相同的键值对。例如: std::unordered_map<Key, T> myMap(otherMap); 在这个例子中,otherMap是另一个已存在的std::unordered_map对象。 除了拷贝构造函数和初始化列表,std::unordered_map还提供了其他一些初始化方式,比如移动构造函数和使用分配器的构造函数。这些构造函数的具体使用方式可以参考引用中的文档。 总结起来,std::unordered_map可以通过初始化列表、拷贝构造函数以及其他方式进行初始化,使得我们可以在创建对象时提供初始数据或者使用现有的对象进行初始化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [c++11 标准模板(STL)(std::unordered_map)(二)](https://blog.csdn.net/qq_40788199/article/details/129224583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值