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

小学生学C++编程语法知识(STL容器(9、智能电话本——认识Map(映射)))


STL课程

第九课:《智能电话本——认识Map(映射)》

本课目标

  1. 理解什么是 Map(映射)。

  2. 理解"键(Key)"和"值(Value)"的概念。

  3. 掌握[]insert()find()count()erase()size()empty()的使用。

  4. 能利用 Map 建立"对应关系"。

  5. 能利用 Map 完成简单统计。


第一幕 神奇电话本

今天。

程序王国来了一个新的管理员。

他说:

我有一本神奇电话本。

里面记录着:

小明 → 13888888888 小红 → 13999999999 小刚 → 13666666666

如果我知道:

小明

能不能立刻找到:

电话号码?


今天我们认识的新朋友。

叫:

Map


中文名字:

映射


或者:

键值对容器


它最大的本领就是:

一个东西,对应另一个东西。


第二幕 什么叫"映射"?

画图:

姓名 小明 ─────────► 13888888888 小红 ─────────► 13999999999 小刚 ─────────► 13666666666

左边。

叫:

Key(键)


右边。

叫:

Value(值)


一句口诀:

通过Key,找到Value。


第三幕 Map还能保存什么?

继续画图。

不仅:

姓名。

还能:

国家。


China ↓ 广州 USA ↓ 纽约

还能:

动物。

Cat ↓ 猫 Dog ↓ 狗

还能:

学号。

1001 ↓ 张三

Map就是:

建立对应关系。


第四幕 请出Map

头文件:

#include<iostream> #include<map> using namespace std;

创建:

map<string,string> phone;

解释:

前面的:

string

表示:

姓名。


后面的:

string

表示:

电话号码。


提醒:

Map要写两个类型。

左边。

右边。

可以分别设定。


第五幕 添加电话

最简单的方法:

phone["小明"]="13888888888"; phone["小红"]="13999999999"; phone["小刚"]="13666666666";

画图:

小明 ↓ 13888888888

第六幕 查电话

请问:

小明电话多少?


程序:

cout<<phone["小明"];

输出:

13888888888

是不是很方便?


第七幕 修改电话

如果:

小明换号码了。

程序:

phone["小明"]="18888888888";

再输出:

cout<<phone["小明"];

结果:

18888888888

总结:

再次赋值,就是修改。


第八幕 Map还能统计次数

今天拿了:

苹果 香蕉 苹果 苹果 香蕉

请问:

苹果拿了几次?


以前。

需要:

循环统计。


今天使用,

Map。

一句话。

map<string,int> cnt;

每来一个水果。

cnt[name]++;

结束以后。

cout<<cnt["苹果"];

输出:

3

同学们惊呼:

这么简单!


第九幕 为什么能++?

解释。

开始,

Map里面没有:

苹果。


程序自动设置:

苹果 ↓ 0

然后拿了苹果就:

++

变成:

1

以后:

再来。

继续:

2 3 4

Map非常聪明。

不存在。

就自动创建。

初始值是:

0。(因为设置的是 int 型)


第十幕 遍历Map

Map里面不是:

一个数字。

而是:

很多:

Key。

Value。


详细介绍:

for(auto x:phone) { cout<<x.first<<" "; cout<<x.second<<endl; }

解释:

first

就是:

左边。

Key。


second

就是:

右边。

Value。


例如:

输出:

小刚 13666666666 小明 18888888888 小红 13999999999

还有特别棒的是:

Map 会按照 Key 自动排序。


第十一幕 find()

如果问:

有没有:

小明?


程序:

if(phone.find("小明")!=phone.end()) { cout<<"找到"; }

map

和Set一样。

找不到。

返回:

end()

第十二幕 erase()

删除:

phone.erase("小红");

以后。

电话本。

就没有:

小红了。


第十三幕 count()

请问:

有没有:

小刚?


cout<<phone.count("小刚");

输出:

1

如果:

没有。

输出:

0

第十四幕 演示程序

#include<iostream> #include<map> using namespace std; int main() { map<string,string> phone; phone["小明"]="13888888888"; phone["小红"]="13999999999"; phone["小刚"]="13666666666"; cout<<"小明电话:"; cout<<phone["小明"]<<endl; cout<<endl; for(auto x:phone) { cout<<x.first<<" "; cout<<x.second<<endl; } return 0; }

第十五幕 课堂实践一——统计单词出现次数

输入:

apple banana apple orange apple banana

要求:

输出:

apple 3 banana 2 orange 1

参考程序:

#include<iostream> #include<map> using namespace std; int main() { map<string,int> cnt; int n; cin>>n; while(n--) { string s; cin>>s; cnt[s]++; } for(auto x:cnt) { cout<<x.first<<" "<<x.second<<endl; } return 0; }

这是:

Map最经典的用途。


第十六幕 课堂实践二——学生成绩查询

输入:

Tom 98 Lucy 100 Jack 95

然后输入:

Lucy

输出:

100

是不是马上会想到刚学的电话本?


第十七幕 Set 和 Map 有什么区别?

画图。

Set:

苹果 香蕉 西瓜

只有:

一个东西。


Map:

苹果 ↓ 5元 香蕉 ↓ 3元 西瓜 ↓ 12元

总结:

Set只有Key。

Map有Key和Value。


本课总结

今天,我们认识了Map(映射)

它最大的特点就是:

一个Key,对应一个Value。


我们掌握了七个最常用的成员函数:

成员函数作用生活中的理解
m[key]添加、修改、查询根据名字查电话
insert()插入一组键值对新增联系人
find()查找Key找联系人
count()判断Key是否存在是否有这个联系人
erase()删除Key删除联系人
size()元素个数电话本里有多少联系人
empty()是否为空电话本是不是空的

🌟 一定要讲的知识——[]find()的区别

这是很多同学最容易踩坑的地方。

现场演示:

map<string,int> cnt; cout<<cnt["apple"]<<endl;

输出:

0

再问:

Map里面原来有apple吗?

没有!

但是执行这一句后:

cnt["apple"]

Map 会自动创建

apple ↓ 0

所以:

m[key]

不仅可以查询。

还可能:

自动新增元素。


而:

find()

只是查找。

不会增加任何东西。

一句话口诀:

[]会"顺手建档案",find()只负责"找档案"。


🌟 竞赛思维

以后。

很多信奥赛题都会使用:

map<int,int> cnt;

或者:

map<string,int> cnt;

看到:

cnt[x]++;

就应该立刻想到:

这是在统计出现次数!

这是Map 在 GESP、CSP-J、NOIP 中出现频率最高的用法之一


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

相关文章:

  • Z-Image-Turbo-Anime轻量化AI动漫生成模型解析
  • 从零到精通:18个月大模型开发实战学习路线
  • TMS320C6424 DSP启动配置与系统初始化实战指南
  • TMS320C54x DSP接口时序深度解析:从建立保持时间到HPI实战设计
  • 新东方国际教育A-Level脱产彼岸ICC项目2026全景解读:全日制学校化管理、双通道升学与全球最高分出分 引言:普高转轨与国际高中脱产潮下的教育模式创新 - 资讯快报
  • 不起眼的五金细节,决定长久好用
  • 2026年适配不同规模企业的员工测评排名盘点 - 得赢
  • AI建站工具从0到1全流程攻略:零代码实现智能对话网站
  • 新都除醛行业调研对比|新房甲醛治理和室内空气净化怎么选?本地老牌直营公司深度推荐 - 专注室内空气检测治理
  • RAG技术解析:检索增强生成在金融领域的实践与优化
  • 深入解析TMS320DM6441视频处理子系统:从VPFE到VPBE的硬件架构与驱动开发
  • 本地 PDF 转 Markdown 操作手册
  • 杭州本地连锁GEO城市合伙人选型推荐哪家靠谱:源头厂商能力、合伙人权益与分润模式深度解析 - 企业新闻快传
  • 嵌入式接口时序深度解析:从建立保持时间到示波器调试实战
  • Python构建古诗词知识图谱与情感分析系统
  • 长效缓释载体基石!DSPE-PEG2k-OH 专用长循环脂质体构建原料
  • 2026报考必看:打算留贵州做IT工作,想报考计算机应用技术专业推荐贵州哪些专科院校 - 2027品牌AI展
  • TMS320C54x DSP中断机制与指令集实战指南
  • Gamma Agent编排失败率下降87%的关键:状态机设计规范+重试熔断策略(内部培训PPT首次公开)
  • 工业高可用 IDC 基础设施方案供应商甄选思路:依托万可工程实力综合研判
  • 算力服务需求暴涨417%却供给不足,权益云智能科技如何破解GPU算力困局?
  • 毕业设计:基于SpringBoot和Vue的化妆管理系统(源码)
  • 2026免费一键去图片水印APP有哪些?实测几款不错的工具 - 免费软件工具方法教程
  • 简述 html 页面渲染过程
  • AI推荐系统面临的数据投毒与幻觉陷阱挑战
  • 虚拟调试网络(VDN)架构解析与TI Target Server实战指南
  • 成都温江区除甲醛深度对比测评|本地靠谱除甲醛公司怎么选?看完少走弯路 - 专注室内空气检测治理
  • 2026西宁黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐
  • TMS320R281x DSP核心通信外设(eCAN/McBSP/SCI/SPI)配置与避坑指南
  • [测试技术] Pytest 入门与实战:fixture、参数化、标记与并行执行