【C++11】:unordered系列关联式容器

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关unordered系列关联式容器的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

1. unordered系列关联式容器

2. unordered_map的介绍

2.1 文档介绍

2.2 接口介绍


1. unordered系列关联式容器

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到\log N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对unordered_map和unordered_set进行介绍,
unordered_multimap和unordered_multiset可查看文档介绍

unordered_multimap文档详细介绍icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/unordered_map/unordered_multimap/

unordered_multiset文档详细介绍icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/unordered_set/unordered_multiset/

2. unordered_map的介绍

2.1 文档介绍

unordered_map文档详细介绍icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/unordered_map/unordered_map/

  • 1. unordered_map是存储<key, value>键值对的关联式容器,其允许通过key快速的索引到与其对应的value。
  • 2. 在unordered_map中,键值通常用唯一的标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。
  • 3. 在内部,unordered_map没有对<kye, value>按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
  • 4. unordered_map容器通过key访问单个元素要比map快,但它通常在遍历元素子集的范围迭代方面效率较低。
  • 5. unordered_maps实现了直接访问操作符(operator[]),它允许使用key作为参数直接访问value。
  • 6. 它的迭代器至少是前向迭代器。

2.2 接口介绍

1. unordered_map的构造

函数声明功能介绍
unordered_map构造不同格式的unordered_map对象

2. unordered_map的容量

函数声明功能介绍
bool empty() const检测unordered_map是否为空
size_t size() const获取unordered_map的有效元素个数

void test_unordered_map1()
{unordered_map<string, string> _dirt;_dirt.insert(make_pair("sort","排序"));_dirt.insert(make_pair("erase", "删除"));_dirt.insert(make_pair("insert", "插入"));_dirt.insert(make_pair("print", "打印"));if (!_dirt.empty()){cout << _dirt.size() << endl;}for (auto ret : _dirt){cout << ret.first << ":" << ret.second << endl;}
}

3. unordered_map的迭代器

函数声明功能介绍
begin返回unordered_map第一个元素的迭代器
end返回unordered_map最后一个元素下一个位置的迭代器
cbegin返回unordered_map第一个元素的const迭代器
cend返回unordered_map最后一个元素下一个位置的const迭代器
void test_unordered_map2()
{unordered_map<string, string> _dirt;_dirt.insert(make_pair("sort", "排序"));_dirt.insert(make_pair("erase", "删除"));_dirt.insert(make_pair("insert", "插入"));_dirt.insert(make_pair("print", "打印"));unordered_map<string, string>::iterator it = _dirt.begin();//auto it = _dirt.begin();while (it != _dirt.end()){cout << it->first << ":" << it->second << endl;it++;}
}

4. unordered_map的元素访问

函数声明功能介绍
operator[]返回与key对应的value,没有一个默认值

注意:该函数中实际调用哈希桶的插入操作,用参数key与V()构造一个默认值往底层哈希桶
中插入,如果key不在哈希桶中,插入成功,返回V(),插入失败,说明key已经在哈希桶中,
将key对应的value返回(与map的operator[]用法一致)。

void test_unordered_map3()
{string arr[] = { "香蕉", "甜瓜","苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };unordered_map<string, int> CountMap;for (auto str : arr){CountMap[str]++;}for (auto e : CountMap){cout << e.first << ":" << e.second << endl;}
}

5. unordered_map的查询

函数声明功能介绍
iterator find(const K& key)返回key在哈希桶中的位置
size_t count(const K& key)返回哈希桶中关键码为key的键值对的个数

注意:unordered_map中key是不能重复的,因此count函数的返回值最大为1

6. unordered_map的修改操作

函数声明功能介绍
insert向容器中插入键值对
erase删除容器中的键值对
void clear()清空容器中有效元素个数
void swap(unordered_map&)交换两个容器中的元素

void test_unordered_map4()
{unordered_map<string, string> _dirt;unordered_map<string, string> ump;_dirt.insert(make_pair("sort", "排序"));_dirt.insert(make_pair("erase", "删除"));_dirt.insert(make_pair("insert", "插入"));_dirt.insert(make_pair("print", "打印"));_dirt.erase("print");_dirt.swap(ump);for (auto e : ump){cout << e.first << ":" << e.second << endl;}
}

7. unordered_map的桶操作

函数声明功能介绍
size_t bucket_count()const返回哈希桶中桶的总个数
size_t bucket_size(size_t n)const返回n号桶中有效元素的总个数
size_t bucket(const K& key)返回元素key所在的桶号

unordered_set就不做介绍了,其接口与map用法相同。 

unordered_set文档详细介绍icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/unordered_set/unordered_set/

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,欲知后事如何,请听下回分解~,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VNCTF 2024 Web方向 WP

Checkin 题目描述&#xff1a;Welcome to VNCTF 2024~ long time no see. 开题&#xff0c;是前端小游戏 源码里面发现一个16进制编码字符串 解码后是flag CutePath 题目描述&#xff1a;源自一次现实渗透 开题 当前页面没啥好看的&#xff0c;先爆破密码登录试试。爆破无果…

鸿蒙应用开发工程师招聘多吗?工资有多少呢?

随着鸿蒙操作系统的快速普及&#xff0c;越来越多的企业开始重视鸿蒙应用开发人才的培养和引进。那么&#xff0c;目前市场上鸿蒙应用开发工程师招聘多吗&#xff1f;工资有多少呢&#xff1f; 首先&#xff0c;我们来了解一下鸿蒙应用开发工程师的招聘情况。随着鸿蒙操作系统…

第三百五十回

文章目录 1. 概要介绍2. 获取方法2.1 获取语言2.2 获取地址 3.示例代码3. 内容总结 我们在上一章回中介绍了"给geolocator插件提交问题"相关的内容&#xff0c;本章回中将介绍如何获取系统语言.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概要介绍 我们在本…

【plt.imshow显示图像】:从入门到精通,只需一篇文章!【Matplotlib】

【plt.imshow显示图像】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib】 &#x1f680; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f4d8; 1. plt.imshow入门&#xff1a;认识并安装Matplotlib库&#x1f308…

【数据结构】17 二叉树的建立

二叉树的建立 由于树是非线性结构&#xff0c;创建一颗二叉树必须首先确定树中结点的输入顺序&#xff0c;常用方法是先序创建和层序创建。 层序创建所用的节点输入序列是按数的从上至下从左到右的顺序形成的各层的空结点输入数值0。在构造二叉树过程中需要一个队列暂时存储各…

gitlab runner 安装、注册、配置、使用(K8S部署)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

C++中获取成员函数地址的方法

C中获取成员函数地址的方法 文章目录 C中获取成员函数地址的方法[toc]前言方法1&#xff1a;通过联合体的共享储存机制方法2&#xff1a;通过汇编取成员函数偏移得到地址调用方法和测试案例 前言 ​ 这里我一共总结了两种目前可以说是最高效易用的方法来获取成员函数地址&…

深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer

2.6 深度学习主流开源框架 表2.1 深度学习主流框架参数对比 框架关键词总结 框架关键词基本数据结构&#xff08;都是高维数组&#xff09;Caffe“在工业中应用较为广泛”&#xff0c;“编译安装麻烦一点”BlobTensorFlow“安装简单pip”TensorPytorch“定位&#xff1a;快…

探索设计模式的魅力:揭秘模版方法模式-让你的代码既灵活又可维护

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、开篇二、应用场景一坨坨代码实现存在的问题 三、解决方案模式方法结构示意图及说明用模板方法模式重构示例解决的问题 四、工作原理使用模板方法模式重写示例结构图核心结构&#xff1a;抽象类和具体实现 五、总结…

【Effective Objective - C】—— 内存管理

【Effective Objective - C】—— 内存管理 前言29.理解引用计数引用计数工作原理关闭ARC模式属性存取方法中的内存管理自动释放池保留环要点 30.以ARC简化引用计数使用ARC时必须遵守的方法命名规则变量的内存管理语义ARC如何清理实例变量要点 31.在dealloc方法中只释放引用并解…

基于深度置信网络的多模态过程故障评估方法及应用

源自&#xff1a;自动化学报 作者&#xff1a;张凯, 杨朋澄, 彭开香, 陈志文 “人工智能技术与咨询” 发布 摘 要 传统的多模态过程故障等级评估方法对模态之间的共性特征考虑较少, 导致当被评估模态故障信息不充分时, 评估的准确性较低. 针对此问题, 首先, 提出一种共性–…

Arrays工具类的常见方法总结

一、Arrays.asList( ) 1.作用&#xff1a;Arrays.asList( )方法的作用是将数组转换成List&#xff0c;将List中的全部集合对象添加至ArrayList集合中 2.参数&#xff1a;动态参数 (T... a) 3.返回值&#xff1a;List 集合 List<T> 4.举例&#xff1a; package com…

删除windows自带输入法

ctrl shift F 搜狗简繁体切换

【第二十四课】二分图:acwing-860染色法判定二分图 / acwing-861二分图的最大匹配 ( c++代码 )

目录 二分图是什么 acwing-860染色法判定二分图 染色法 代码 acwing-861二分图的最大匹配 思路 代码 二分图是什么 学习二分图的目的就是一些题目可以简化成二分图的模型来求解。 二分图也就是&#xff1a;一个无向图顶点集&#xff0c;分成了两堆顶点(可以理解为两…

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…

《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)

文章目录 7.1 使用 Go Modules 管理依赖 - 掌舵向未来7.1.1 基础知识讲解7.1.2 重点案例&#xff1a;Web 服务功能描述实现步骤扩展功能 7.1.3 拓展案例 1&#xff1a;使用数据库功能描述实现步骤扩展功能 7.1.4 拓展案例 2&#xff1a;集成 Redis 缓存功能描述实现步骤扩展功能…

Sora 和之前 Runway 那些在架构上有啥区别呢?

问&#xff1a;Sora 和之前 Runway 那些在架构上有啥区别呢&#xff1f; 答&#xff1a;简单来说 Runway 是基于扩散模型&#xff08;Diffusion Model&#xff09;的&#xff0c;而 Sora 是基于 Diffusion Transformer。 Runway、Stable Diffusion 是基于扩散模型&#xff08…

MySQL 插入10万条数据性能分析

MySQL 插入10万条数据性能分析 一、背景 笔者想复现一个索引失效的场景&#xff0c;故需要一定规模的数据作支撑&#xff0c;所以需要向数据库中插入大约一百万条数据。那问题就来了&#xff0c;我们应该怎样插入才能使插入的速度最快呢&#xff1f; 为了更加贴合实际&#…

cool Node后端 中实现中间件的书写

1.需求 在node后端中&#xff0c;想实现一个专门鉴权的文件配置&#xff0c;可以这样来解释 就是 有些接口需要token调用接口&#xff0c;有些接口不需要使用token 调用 这期来详细说明一下 什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理&#xf…

如何用AI绘画工具最好最省时省事的方法制作个性化头像框?

原文章链接&#xff1a;如何根据游戏素材制作主题头像框&#xff1f;实战教程来了&#xff01; - 优设网 - 学设计上优设 教程专区&#xff1a;AI绘画&#xff0c;AI视频&#xff0c;AI写作等软件类型AI教程&#xff0c; AI工具专区&#xff1a;AI工具-喜好儿aigc 在 APP 的…