【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;先爆破密码登录试试。爆破无果…

https 为什么安全

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种用于在计算机网络上安全地传输数据的通信协议。它是基于HTTP协议的扩展&#xff0c;通过使用SSL/TLS协议来加密通信内容&#xff0c;从而提供了数据的保密性和完整性&#xff0c;以及对通信双方身份的认…

Rust 初体验6

学习 Rust 的同学&#xff0c;大概都有其他语言的背景。仔细分辨与已有知识的差别&#xff0c;或有助于更好地理解Rust。以下是把 C 语言与 Rust 作一初步对比&#xff0c;以见出其中差别。 1.变量声明&#xff1a; C语言使用int、float等关键字来声明变量的类型&#xff0c;…

RESTful api-- 详解

1. 了解什么是 api 参考链接 – 本人 2. 了解 web 发展阶段 参考链接 – 本人 3. 了解什么是 REST 参考链接 – 菜鸟教程 REST 全称是 Representational State Transfer&#xff0c;中文意思是表述&#xff08;编者注&#xff1a;通常译为表征&#xff09;性状态转移。 RE…

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

随着鸿蒙操作系统的快速普及&#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;快…

Vue2源码梳理:vdom结构与createElement的实现

vdom 结构 浏览器原生dom对象&#xff0c;本身就是一个非常复杂的对象&#xff0c;单单把 div 这个dom对象拿出来&#xff0c;遍历它的属性&#xff0c;将是一个庞大的存在因为浏览器的标准就是把这个dom设计的非常复杂&#xff0c;所以当我们去频繁的操作dom的话&#xff0c;…

模板(个人学习笔记黑马学习)

1、函数模板 语法: template<typename T> 函数声明或定义 解释: template --- 声明创建模板 typename --- 表面其后面的符号是一种数据类型&#xff0c;可以用class代替通用的数据类型&#xff0c;名称可以替换&#xff0c;通常为大写字母 T -- 通用的数据类型&#xff0…

654. 最大二叉树

654. 最大二叉树 题目链接&#xff1a;654. 最大二叉树 代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* T…

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

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

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

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

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

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

书生·浦语大模型实战营学习总结

书生浦语大模型实战营学习总结 实战营课程内容个人笔记汇总个人作业汇总个人大作业总结 实战营课程内容 为了推动大模型在更多行业落地开花&#xff0c;让开发者们更高效的学习大模型的开发与应用&#xff0c;上海人工智能实验室重磅推出书生浦语大模型实战营&#xff0c;为广…

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 搜狗简繁体切换