当前位置: 首页 > 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.gsyq.cn/news/1562023.html

相关文章:

  • 线段树算法总结
  • SCF5250微控制器:嵌入式音频系统核心架构与驱动开发实战
  • 电瓶车托运保价别踩坑!2026避坑指南+正确买法 - 快递物流资讯
  • Python毕业设计-基于 Python 的题库资源综合管理系统的设计与实现 基于 Python 的教育题集处理与管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 2026年AI学习机推荐:对比四类产品,奇多多通过了启蒙考验 - 新闻快传
  • 嵌入式GUI开发实战:emWin模拟触摸屏驱动与校准全解析
  • 一人AI公司实战指南:从需求切片到首笔收款的14个关键动作
  • 二手平台哪个更靠谱?不看广告看机制,四大平台实测对比 - 新闻快传
  • 2026南京大牌闲置变现底价指南|不赚差价,实时行情顶格报价回收 - 讯息早知道
  • 商用洗碗机怎么选?苏州本地利宝厨具一站式解决方案 - 新闻快传
  • 二手平台哪个更靠谱?从质检、价格到隐私,2026横向对比见分晓 - 新闻快传
  • 算法入门|埃拉托斯特尼筛法,一张表筛出 1~120 所有质数
  • echarts-for-weixin:微信小程序数据可视化架构设计与企业级应用实践
  • 5秒无损转换B站缓存视频:m4s-converter快速入门指南
  • 广州白蚁防治哪家强?对比5家实测,青林微创探巢完胜 - 博客万
  • 如何3分钟完成Windows与Office永久激活:KMS_VL_ALL_AIO智能激活指南
  • 2026 临沂实木全屋定制口碑 TOP5:回访 5000 + 入住满 1 年业主 - 新闻快传
  • 2026年林芝精密钢管工厂哪家强,冷拔精密无缝钢管/45# 冷拔无缝钢管,精密钢管源头厂家哪家专业 - 品牌推荐师
  • Windows系统文件imm32.dll丢失找不到问题解决
  • PIC单片机动态功耗管理实战:Doze、Idle与PMD模式详解
  • 2026 鲁南无贴皮实木全屋定制工厂综合推荐 TOP6!50000 + 业主实测 - 新闻快传
  • 2026南京奢品履约白皮书,看图报价即到店价,无临时砍价 - 讯息早知道
  • 2026:宁波甲醛检测治理公司深度调研测评,从资质、售后维度对比,本地直营选宁波博豪环保更稳妥 - 专注室内空气检测治理
  • 2026:宁波甲醛检测治理公司全维度消费者测评,从门店、服务流程、售后回访综合对比,宁波博豪环保服务体系更贴合本地业主需求 - 专注室内空气检测治理
  • Kafka-UI实战部署指南:10分钟构建企业级可视化监控平台
  • 2026年6月最新帝舵中国官方售后服务热线客服电话地址网点 - 亨得利官方服务中心
  • 2026南京闲置奢品出手指南|不虚高报价,线上线下价一致 - 讯息早知道
  • 2026年刀片刺绳厂家推荐榜单 - 资讯速览
  • 2026海口卖黄金常见5个套路及识别方法:避坑科普干货 - 博客万
  • 2026 临沂同城驾校实地测评|兰山区 / 河东区 / 罗庄区 / 北城新区驾校报名哪家负责?考驾照正规驾校横向对比 - 吉林同城获客