当前位置: 首页 > news >正文

GESP7级C++考试语法知识(四、哈希表(4、unordered_map)


第四课:《藏宝图仓库——认识 unordered_map》


一、终于来到真正的藏宝图仓库!

经过前三课的冒险,同学们已经认识了:

✅ 哈希表

✅ 哈希函数

✅ 哈希冲突


今天。

智慧大臣决定带大家参观王国最神秘的地方:

🏆 藏宝图仓库


据说这里保存着全国最重要的资料:

学生姓名 → 分数 学号 → 学生信息 宠物名字 → 等级 城市名字 → 人口

国王说:

“以前这些东西都记在大本子里。”

“查找太慢了。”


于是。

程序王国发明了:

unordered_map

二、什么是 unordered_map?

1、先不要被这个长长的名字吓到。

拆开来看:

unordered + map

其中:

map

意思是:

映射

也就是:

一个东西 对应 另一个东西

例如:

Tom → 95 Jack → 88 Mike → 100

这就叫:

名字 → 分数

映射。


2、我们来看:

unordered_map

unordered = un(不)+ ordered(有序的)= 无序的


3、在 C++ 中的对比:

容器含义底层结构顺序
map有序映射红黑树✅ 按 key 排序
unordered_map无序映射哈希表❌ 不保证顺序

一句话unordered就是"不排序",遍历时元素顺序不可预测,但查询速度更快(平均 O(1))。


三、藏宝图仓库长什么样?

1、假设有三个学生:

Tom Jack Mike

2、对应成绩:

95 88 100

3、在仓库里保存成:

Tom → 95 Jack → 88 Mike → 100

4、这里:

Tom Jack Mike

叫:

Key(键)


5、而:

95 88 100

叫:

Value(值)


6、记住:

Key 找 Value

这就是哈希表的核心思想。


四、第一个 unordered_map

1、先学会创建仓库。


2、代码:

#include <iostream> #include <unordered_map> using namespace std; int main() { unordered_map<string,int> score; }

3、这句话:

unordered_map<string,int> score;

表示:

字符串 → 整数

映射。


4、就是题目中的:

姓名 → 分数

例如:

Tom → 95

五、什么是 string 和 int?

1、这里:

unordered_map<string,int>

有两个类型。


第一个:

string

表示:

钥匙(Key)

类型。


第二个:

int

表示:

值(Value)

类型。


2、例如:

unordered_map<string,int>

表示:

姓名 → 分数

3、再比如:

unordered_map<int,string>

表示:

学号 → 姓名

例如:

1001 → Tom 1002 → Jack

六、往仓库放宝藏

1、仓库建好了,接下来放数据。


2、代码:

score["Tom"] = 95;

意思:

Tom → 95

继续:

score["Jack"] = 88; score["Mike"] = 100;

仓库变成:

Tom → 95 Jack → 88 Mike →100

图示:

┌─────────┐ │ Tom │──►95 ├─────────┤ │ Jack │──►88 ├─────────┤ │ Mike │──►100 └─────────┘

七、查询宝藏

1、国王来了。

他问:

“快告诉我 Tom 的成绩!”


2、以前:

一个一个找

3、现在:

直接:

cout << score["Tom"];

输出:

95

4、哈希表自动找到对应位置。

速度飞快!


八、完整程序

#include <iostream> #include <unordered_map> using namespace std; int main() { unordered_map<string,int> score; score["Tom"] = 95; score["Jack"] = 88; score["Mike"] = 100; cout << score["Tom"] << endl; cout << score["Jack"] << endl; cout << score["Mike"] << endl; return 0; }

输出:

95 88 100

九、修改宝藏

1、假设期末考试结束。

Tom进步了。


原来:

Tom → 95

现在:

Tom → 99

怎么办?

非常简单。


2、直接重新赋值:

score["Tom"] = 99;

仓库自动更新。


3、再次查询:

cout << score["Tom"];

输出:

99

十、一个神奇现象

1、观察代码:

score["Tom"] = 95;

这里:

score["Tom"]

像不像数组?


数组:

a[3]

表示:

下标3

哈希表:

score["Tom"]

表示:

下标Tom

是不是很神奇?


2、数组只能:

0 1 2 3

作为下标。


而哈希表:

Tom Jack Mike

都能作为下标!


十一、遍历仓库

1、如果想看看所有数据。

可以使用:

for(auto p : score) { cout << p.first << " " << p.second << endl; }

2、这里:

p.first

表示:

Key

即:

Tom Jack Mike

3、而:

p.second

表示:

Value

即:

95 88 100

十二、藏宝图管理系统实战

1、假设王国举办考试。

输入:

Tom 95 Jack 88 Mike 100

2、代码:

#include <iostream> #include <unordered_map> using namespace std; int main() { unordered_map<string,int> score; score["Tom"] = 95; score["Jack"] = 88; score["Mike"] = 100; string name; cin >> name; cout << score[name]; return 0; }

输入:

Tom

输出:

95

输入:

Mike

输出:

100

3、这就是哈希表最经典的用途:

姓名查分数

十三、生活中的 unordered_map

其实它无处不在。


1、学校系统

学号 → 学生

2、电话簿

姓名 → 电话

3、游戏

角色名 → 等级

4、宠物系统

宠物名 → 战斗力

5、字典

单词 → 中文

6、这些都可以用:

unordered_map

完成。


十四、课堂挑战

1、现在有:

unordered_map<string,int> pet;

2、执行:

pet["Dog"] = 50; pet["Cat"] = 40; pet["Dragon"] = 100;

问题1:

pet["Dog"]

是多少?


答案:

50

问题2:

pet["Dragon"]

是多少?


答案:1

100

问题3:

执行:

pet["Dog"] = 80;

后。

pet["Dog"]

是多少?


答案:

80

本课总结

1、今天我们正式学会了 C++ 中最常用的哈希表:

🏆 unordered_map


2、创建:

unordered_map<string,int> mp;

3、插入:

mp["Tom"] = 95;

4、查询:

cout << mp["Tom"];

5、修改:

mp["Tom"] = 100;

6、遍历:

for(auto p : mp) { cout << p.first << " " << p.second; }

魔法口诀

藏宝仓库真神奇, 姓名竟能当下标。 存数据,用等号; 查数据,用方括号。 Key找到Value快, 这就是哈希表。 unordered_map本领大, 查找速度顶呱呱!

下一课,我们将进入哈希表最经典、最常见、最重要的应用:

《人数统计中心——统计出现次数》

到时候你会发现:

cnt[x]++;

竟然能轻松解决大量比赛题目!

🚀


http://www.jsqmd.com/news/1050112/

相关文章:

  • 果速修门店环境与设备配置:无尘维修间+工业级设备链,全国统一标准,热线400-811-2953 - 博客万
  • 2026年6月最新格拉苏蒂中国官方售后电话热线客服地址服务网点 - 亨得利官方服务中心
  • 基于AI视觉的桌面GUI自动化:UI-TARS Desktop原理与实践
  • 思源宋体终极使用指南:7种字重免费开源宋体的完整配置方案
  • 如何高效管理音乐歌词:MusicLyricApp的完整解决方案
  • 走访河源128家黄金奢侈品回收店,这份靠谱商家清单出手前必看 - 生活测评小能手
  • LPC213x UART0寄存器配置、波特率计算与自动波特功能实战解析
  • 2026佛山白蚁防治避坑实测!5大主流平台横向对比本地人防御优选攻略 - 博客万
  • LPC210x ADC与定时器实战:寄存器级配置、避坑指南与协同应用
  • 线段树算法总结
  • 如何高效解决B站缓存视频播放难题:m4s-converter的5个实用技巧
  • 量化特征工程实战:构建工业级Alpha因子生态体系
  • 2026 马鞍山市|全市中考一两百分初三统一招生,淮南职业技术学校公办中职简章公示,联系方式 15756001370 - 我叫小周
  • 电瓶车托运保价别踩坑!2026避坑指南+正确买法 - 快递物流资讯
  • SCF5250微控制器:嵌入式音频系统核心架构与驱动开发实战
  • 2026年杭州本地生活GEO技术革新:如何精准提升用户定位体验
  • 免费网盘直链下载助手终极指南:告别限速,轻松获取高速下载链接
  • YOLO26涨点改进| Arxiv 2026 | 独家频域创新改进篇 | 引入PRM相位校正模块,通过从频率域增强目标表征,助力红外小目标检测、遥感目标检测、图像分割任务高效涨点
  • TSN时间敏感网络实战:基于SJA1105的PTP同步与802.1Qbv调度配置
  • Mac本地大模型部署指南:Codex+Codex Desktop保姆级实战
  • ComfyUI精准控制:理解steps/cfg/denoise三参数协同机制
  • Python毕业设计-基于 Python 的题库资源综合管理系统的设计与实现 基于 Python 的教育题集处理与管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 深入解析8位PIC单片机DCO与时钟切换:从原理到低功耗实战
  • 2026年AI学习机推荐:对比四类产品,奇多多通过了启蒙考验 - 新闻快传
  • 2026年想找扬州靠谱毛坯房装修?这几家技术过硬实力值得参考 - 资讯速览
  • 2026年散热器铝型材开模定制:4家诚信厂家深度对比评测 - 资讯速览
  • 嵌入式GUI开发实战:emWin模拟触摸屏驱动与校准全解析
  • 飞思卡尔PQ-MDS-QOC3模块硬件配置实战:从跳线到光纤链路建立
  • 一人AI公司实战指南:从需求切片到首笔收款的14个关键动作
  • 工业 RAG + 微调混合系统【左扬精讲】—— R1 系列收官之作:从 Prompt → RAG → 微调 选型决策树