C++容器——unordered_map浅谈

实现原理 

unordered_map 在 C++ 标准库中的实现基于哈希表(Hash Table)数据结构。哈希表通过一个哈希函数将键转换为数组的索引,然后在对应的桶(buckets)中存储元素。当多个键映射到相同的哈希值时,通常采用链地址法解决冲突,即在每个桶内使用链表存储多个元素。

常用操作

#include <unordered_map>
using namespace std;// 创建一个空的 unordered_map,键值类型为 string,值类型为 int
unordered_map<string, int> myMap;// 插入元素
myMap["apple"] = 10; // 直接插入
myMap.insert({"banana", 20}); // 使用 insert 函数插入
// 查找元素
if (myMap.find("apple") != myMap.end()) {cout << "apple's value: " << myMap["apple"] << endl;
}// 更新元素
myMap["apple"] = 30; // 直接更新// 删除元素
myMap.erase("apple");// 遍历 unordered_map
for (const auto &pair : myMap) {cout << pair.first << ": " << pair.second << endl;
}

特性及应用

  • 无序性unordered_map 中的元素顺序是不确定的,不保证按照任何特定的顺序排列。
  • 唯一键:键必须是唯一的,尝试插入具有相同键的元素不会更改已有元素的值,而是直接忽略该插入操作。
  • 高效查找:平均情况下,插入、删除和查找操作的时间复杂度都是 O(1),取决于哈希函数的质量以及负载因子(bucket 数量与实际元素数量的比例)。
  • 应用:常用于需要快速根据键查找值的场景,例如缓存、词频统计等。

相关容器及区别

  • map:C++ 标准库中的另一种关联容器,同样以键值对的形式存储元素,但其底层实现是红黑树,因此它保持了键的排序顺序,查找、插入和删除操作的平均时间复杂度为 O(log n)。

  • unordered_multimap:类似于 unordered_map 的变体,允许键有重复,并且对应多个值。而在 unordered_map 中,每个键都只能对应一个值。

总结来说,unordered_map 是一个高效的无序键值对容器,适合于不需要维持键的顺序且重视查找速度的应用场景。

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

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

相关文章

《1w实盘and大盘基金预测 day2》

上贴指数预测还行&#xff0c;周三指数最低在3031&#xff0c;我预测的最低点3028。 昨天的预测 3028-3058-3072 今天gjd没有过多干预A股&#xff0c;主要去港股那边了。看的出来正在让市场自己走。目前技术指标还是好用的 3075应该不是这波行情的最高点 板块机会&#xff1…

【研发日记】,Matlab/Simulink开箱报告(十)——Requirements Toolbox

前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;五&#xff09;——S-Fuction模块(C MEX S-Function)》 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;六&#xff09;——S-Fuction模块&#xff08;TLC&#xff09;》 见《开…

JavaEE:网络编程

网络编程&#xff1a;通过代码完成基于网络的跨主机通信 跨主机通信方式&#xff1a; 1.TCP/IP网络 2.蓝牙通信 3.近场通信NFC 4.毫米波通信&#xff1a;功率高&#xff0c;带宽高&#xff0c;抗干扰能力差 其中TCP/IP网络是日常编程中最常涉及到的&#xff0c;最通用的跨主机通…

安卓六大布局

LinearLayout&#xff08;线性布局&#xff09; 1.简介 线性布局在开发中使用最多&#xff0c;具有垂直方向与水平方向的布局方式。LinearLayout 默认是垂直排列的&#xff0c;但是可以通过设置 android:orientation 属性来改变为水平排列。 2.常用属性 orientation&#xf…

Linux编程4.3 网络编程-数据封装

1、数据封装 2、Internet协议&#xff08;IP&#xff09; IP的主要目的是为数据输入/输出网络提供基本算法&#xff0c;为高层协议提供无连接的传送服务。这意味着在IP将数据递交给接收站点以前不在传输站点和接收站点之间建立对话&#xff08;虚拟链路&#xff09;。它只是封…

【网络工程师进阶之路】BFD技术

个人名片&#xff1a;&#x1faaa; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&a…

软考75-上午题-【面向对象技术3-设计模式】-设计模式的要素

一、题型概括 上午、下午题&#xff08;试题五、试题六&#xff0c;二选一&#xff09; 每一个设计模式都有一个对应的类图。 二、23种设计模式 创建型设计模式&#xff1a;5 结构型设计模式&#xff1a;7 行为设计模式&#xff1a;11 考试考1-2种。 三、设计模式的要素 3…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人跌倒检测系统(深度学习+UI界面+完整训练数据集)

摘要&#xff1a;开发行人跌倒检测系统在确保老年人安全方面扮演着至关重要的角色。本篇文章详尽地阐述了如何利用深度学习技术构建一个行人跌倒检测系统&#xff0c;并附上了完整的代码实现。该系统采用了先进的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6、YOLOv5等先前版本进…

js的事件有哪些?

鼠标事件&#xff1a; 鼠标事件 触发条件 onclick 鼠标点击左键触发 oncontextmenu 鼠标点击右键触发 ondblclick 鼠标双击触发 onmouseover 鼠标经过触发 onmouseout 鼠标离开触发 onmousemove 鼠标移动触发 onmouseup 鼠标弹起触发 onmousedown 鼠标按下触发 键盘事…

C经典BUG:给void*传递char **是不会报错的,连警告都没有

初级代码游戏的专栏介绍与文章目录-CSDN博客 我们知道C语言的void*表示无类型的指针&#xff0c;或者说&#xff0c;void*可以接受任何指针&#xff0c;这简直就是个魔法。 这个魔法意味着你可以做任何事&#xff0c;也意味着BUG。 我今天花了一些时间来解决一个BUG。本来一切都…

王道OnlineJudge 14

题目 二叉树层次建树就是一层一层的建树&#xff0c;从左到右。随着纵向层次的深入&#xff0c;结点的数量变化规律为&#xff1a;1→2→4→8→16→32。 先画图&#xff0c;然后看图可闭眼写代码 右边为辅助队列&#xff0c;有多少个二叉树结点&#xff0c;就有多少个辅助队…

【JavaScript】数据类型转换 ① ( 隐式转换 和 显式转换 | 常用的 数据类型转换 | 转为 字符串类型 方法 )

文章目录 一、 JavaScript 数据类型转换1、数据类型转换2、隐式转换 和 显式转换3、常用的 数据类型转换4、转为 字符串类型 方法 一、 JavaScript 数据类型转换 1、数据类型转换 在 网页端 使用 HTML 表单 和 浏览器输入框 prompt 函数 , 接收的数据 是 字符串类型 变量 , 该…

第6章:MATLAB文本数据处理进阶篇的目录 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 第6章&#xff1a;MATLAB文本数据处理进阶篇 6.1 文本格式化 …

爆肝整理万能sass框架:react18+webpack5+typescript+ant Design,框架在手,交付无忧!!!

来活了&#xff0c;要求一周时间内快速给xxx业务开发一个sass系统平台&#xff0c;要求有角色权限控制&#xff0c;推荐模块&#xff0c;各种业务内容模块&#xff0c;莫慌&#xff0c;直接上代码&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1.系统框架配置…

DAY by DAY 史上最全的Linux常用命令汇总----命令格式

命令行基本操作 命令使用方法 Linux命令格式&#xff1a; command [-options] [parameter1] … 1 command: 命令名&#xff1b; [-options]&#xff1a;选项,可用来对命令进行控制&#xff0c;也可以省略&#xff0c;[]代表可选 parameter1 …&#xff1a;传给命令的参数&a…

带你摸透C语言相关内存函数

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

Windows10/11配置WSL(Ubuntu)环境

文章目录 WSL介绍WSL部署扩展&#xff1a;辅助工具Windosw Terminal安装下载 WSL介绍 传统方式获取Linux操作系统&#xff0c;是安装完整的虚拟机及镜像环境&#xff0c;例如虚拟机VMware 而使用WSL,可以以非常轻量化的方式&#xff0c;得到Linux系统环境 它无需单独虚拟一套硬…

【Linux】常用基础命令(一)

命令的提示符 [rootlocalhost: ~]# []&#xff1a;这是提示符的分隔符号&#xff0c;没有特殊含义。root&#xff1a;显示的是当前的登录用户&#xff1a;分隔符&#xff0c;没有特殊含义。localhost&#xff1a;当前系统的简写主机名&#xff08;完整主机名是 localhost.loc…

校园兼职无忧网-创业计划书(附下载)

校园兼职无忧网是一个致力于为在校大学生提供兼职工作机会的平台&#xff0c;旨在搭建一个便捷、高效、安全的信息对接服务。该平台通过整合校内外各类兼职资源&#xff0c;包括但不限于家教、促销、实习等岗位&#xff0c;帮助学生找到适合自己的兼职工作&#xff0c;同时为用…

PostGIS 中的 K-Means 聚类操作及应用

K-Means算法&#xff1a; K-means 是数据科学和商业的基本算法。让我们深入了解一下。 1. K-means是一种流行的用于聚类的无监督机器学习算法。它是用于客户细分、库存分类、市场细分甚至异常检测的核心算法。 2. 无监督&#xff1a;K-means 是一种无监督算法&#xff0c;用于…