尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

小学生学C++编程语法知识(STL容器(9、智能电话本——认识Map(映射)))
📅 发布时间:2026/7/23 21:30:13


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 中出现频率最高的用法之一。


相关新闻

  • 深入解析TMS320DM6441视频处理子系统:从VPFE到VPBE的硬件架构与驱动开发
  • Gamma Agent编排失败率下降87%的关键:状态机设计规范+重试熔断策略(内部培训PPT首次公开)
  • 2026报考必看:打算留贵州做IT工作,想报考计算机应用技术专业推荐贵州哪些专科院校 - 2027品牌AI展

最新新闻

  • 链接表能删了:Access 直连 SQL Server,DAO 绑窗体 + ADO 参数查询完整代码
  • TVA驱动的具身智能迭代逻辑(12)
  • iframe是什么?有哪些优缺点?
  • openEuler 22.03 NFS + mergerfs 存储池部署与性能调优完整文档
  • 模型评估和模型选择
  • ClineRule系统提示词

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号