VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 7779|回复: 90

《实用C++》第50课 C++容器之映射map

  [复制链接]
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-6-26 00:26:25 | 显示全部楼层 |阅读模式
1、什么是 map,他跟 vector 和 list 有什么区别?什么情况下使用 map?
map提供的是一种键值对的容器,里面的数据元素都是成对出现的,即:key-value,在知道 key 的情况下能迅速的找到 value,他们是一一对应的关系。
如下图:第一个值称之为关键字(key),每个关键字只能在map中出现一次,是唯一的;第二个称之为该关键字的对应值:
《实用C++》第50课 C++容器之映射map

例如:学校中的学生,用学生的什么信息作为 key 呢?可以用学号,在校的学生学号不可能重复,所以可以用学号作为key,学生的姓名或者学生信息作为value,value可以重复,可以相同,毕竟有重名的情况发生。

2、map 的使用场景:
优点查找起来很快:根据 key 值快速查找记录,查找的复杂度基本是 Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。怎么样快吧?所以,当大家以后的工程中有比较多的使用想快速查找的话可以使用map。

3、map的头文件和命名空间:
#include <map> //注意,没有 .h
using namespace std; //在 std 标准命名空间中

4、map的定义:
一般情况下,都是定义一个空的 map 对象,例如:
map<int, char> stud_sex_map;
定义完了之后再使用,map也是个模板类,所以他也是支持各种类型的。

5、map的使用:
定义完了之后我们就可以开始使用了,例如:
  1. int main(int argc, char* argv[])
  2. {
  3.     map<int, char> stud_sex_map;
  4.     stud_sex_map[10010] = 'm'; //赋值
  5.     stud_sex_map[10011] = 'f';
  6.     int n_size = stud_sex_map.size(); //返回容器的元素个数
  7.     stud_sex_map.empty(); //检测容器是否为空

  8.     char sex = stud_sex_map[10010];
  9.     sex = stud_sex_map[10012]; //这个值会是多少呢?

  10.     if (stud_sex_map.count(10012) <= 0) //判断容器中是否有某个元素
  11.     {
  12.         stud_sex_map[10012] = 'f';
  13.     }

  14.     sex = stud_sex_map[10012];

  15.     return 0;
  16. }
复制代码


6、map的删除:
删除的话首当其冲的肯定是erase方法了。erase 方法支持 key 删除和迭代器删除,例如:
stud_sex_map.erase(10010);
stud_sex_map.erase(stud_sex_map.begin());

7、map的遍历:
因为是 map 不是数组,所以不能用下标来遍历,只能用迭代器来遍历,如下:
for (map<int, char>::iterator itor = stud_sex_map.begin(); itor != stud_sex_map.end(); ++itor)
{
    int key = itor->first;
    char ch = itor->second;
    cout << "key = " << key << ", value = " << ch << endl;
}

8、小作业:
定义一个 map<int, char> 类型的对象:
依次存入以下内容:
10010->'m'
10011->'f'
10012->'f'
10013->'m'
10014->'f'
10015->'m'

之后,使用 for 循环删除map中的value值为 'f' 的元素,并将结果输出出来!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38388453/?p=52
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1v_XJs6924Bhh_0Qcj3RLHg 提取码:jfnv
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用C++》第49课 C++容器之链表list②
下一篇:《实用C++》第51课 C++中的字符串类stirng①
58_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 07:29:11 | 显示全部楼层
这次课出的好快,,顺便问下站长,有出windows 驱动新手教程嘛?
98_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 08:36:40 | 显示全部楼层
学习好
知识佳
谢谢分享
80_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 08:41:30 | 显示全部楼层
坚持学习!
82_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 09:40:10 | 显示全部楼层
谢谢分享..
78_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 09:44:57 | 显示全部楼层
不错不错,谢谢
82_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 10:20:26 | 显示全部楼层

谢谢提供,学习一下
74_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 10:40:12 | 显示全部楼层
看看         
74_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 17:09:51 | 显示全部楼层
想看。。。。。。
49_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-26 17:52:26 | 显示全部楼层
人回复入会费入会费
78_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-27 13:28:32 | 显示全部楼层
很好很好               好的的
95_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-28 13:31:03 | 显示全部楼层

学习好
知识佳
谢谢分享
66_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-29 15:24:13 | 显示全部楼层
之后,使用 for 循环删除map中的value值为 'f' 的元素,并将结果输出出来!
48_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-30 00:09:43 | 显示全部楼层
dddddddddd
75_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-30 11:57:31 | 显示全部楼层
谢谢分享,楼主辛苦了!
23_avatar_middle
最佳答案
0 
online_vip 发表于 2018-6-30 14:35:45 | 显示全部楼层
《实用C++》第50课 C++容器之映射map666666666
96_avatar_middle
最佳答案
0 
在线会员 发表于 2018-6-30 16:51:33 | 显示全部楼层
谢谢老大!!!
30_avatar_middle
最佳答案
0 
在线会员 发表于 2018-7-2 16:52:37 | 显示全部楼层
efwegwerrg4rg45rg45r
34_avatar_middle
最佳答案
0 
在线会员 发表于 2018-7-2 22:22:08 | 显示全部楼层
不错不错,更新很快
40_avatar_middle
最佳答案
0 
online_vip 发表于 2018-7-4 19:55:59 | 显示全部楼层
认真学习!!!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-20 18:43

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表