VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 666|回复: 32

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

[复制链接]
51_avatar_middle
online_admins Syc 发表于 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' 的元素,并将结果输出出来!

第50课免费试看,下载地址回复后可见:
游客,如果您要查看本帖隐藏内容请回复

#######################################################
获得所有教学视频、课件、源代码以及售后答疑详见:
《实用C++》:http://www.cctry.com/thread-275996-1-1.html
VC驿站官方客服QQ:8260671

#######################################################




上一篇:《实用C++》第49课 C++容器之链表list②
下一篇:一道练习小题 基于01-23课知识做

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

58_avatar_middle
online_member AxiaoA 发表于 2018-6-26 07:29:11 | 显示全部楼层
这次课出的好快,,顺便问下站长,有出windows 驱动新手教程嘛?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

98_avatar_middle
online_member tomok 发表于 2018-6-26 08:36:40 | 显示全部楼层
学习好
知识佳
谢谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

80_avatar_middle
online_member zp521 发表于 2018-6-26 08:41:30 | 显示全部楼层
坚持学习!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

82_avatar_middle
online_member DetectiveY 发表于 2018-6-26 09:40:10 | 显示全部楼层
谢谢分享..

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
online_member csa 发表于 2018-6-26 09:44:57 | 显示全部楼层
不错不错,谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

82_avatar_middle
online_member ha521ha 发表于 2018-6-26 10:20:26 | 显示全部楼层

谢谢提供,学习一下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

74_avatar_middle
online_vip08 wssfcn 发表于 2018-6-26 10:40:12 | 显示全部楼层
看看         

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

online_member 匿名  发表于 1970-1-1 08:00:00
post_deleted

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

74_avatar_middle
online_member jiaokai123 发表于 2018-6-26 17:09:51 | 显示全部楼层
想看。。。。。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

49_avatar_middle
online_member yuanpinq 发表于 2018-6-26 17:52:26 | 显示全部楼层
人回复入会费入会费

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
online_member wplygjs1 发表于 2018-6-27 13:28:32 | 显示全部楼层
很好很好               好的的

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

95_avatar_middle
online_member zjh2008 发表于 2018-6-28 13:31:03 | 显示全部楼层

学习好
知识佳
谢谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

66_avatar_middle
online_member ly1599285982 发表于 2018-6-29 15:24:13 | 显示全部楼层
之后,使用 for 循环删除map中的value值为 'f' 的元素,并将结果输出出来!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

48_avatar_middle
online_member haohongtao11 发表于 2018-6-30 00:09:43 | 显示全部楼层
dddddddddd

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
online_member Sam599 发表于 2018-6-30 11:57:31 | 显示全部楼层
谢谢分享,楼主辛苦了!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

23_avatar_middle
online_vip 黑鱼 发表于 2018-6-30 14:35:45 | 显示全部楼层
《实用C++》第50课 C++容器之映射map666666666

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

96_avatar_middle
online_member Jer808 发表于 2018-6-30 16:51:33 | 显示全部楼层
谢谢老大!!!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

85_avatar_middle
online_member 99099800 发表于 2018-6-30 16:53:45 | 显示全部楼层
感谢分享,学习一下.

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

30_avatar_middle
online_member 13321788988 发表于 2018-7-2 16:52:37 | 显示全部楼层
efwegwerrg4rg45rg45r

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

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

GMT+8, 2018-7-17 06:01

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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