当前课程知识点:C++语言程序设计进阶 >  第十章 泛型程序设计与C++标准模板库 >  关联容器 >  映射

返回《C++语言程序设计进阶》慕课在线视频课程列表

映射在线视频

映射

映射(map)

例10-10

有五门课程,每门都有相应学分,从中选择三门,输出学分总和

//10_10.cpp
#include <iostream>
#include <map>
#include <string>
#include <utility>
using namespace std;
int main() {
    map<string, int> courses;
    //将课程信息插入courses映射中
    courses.insert(make_pair("CSAPP", 3));
    courses.insert(make_pair("C++", 2));
    courses.insert(make_pair("CSARCH", 4));
    courses.insert(make_pair("COMPILER", 4));
    courses.insert(make_pair("OS", 5));
    int n = 3;      //剩下的可选次数
    int sum = 0;    //学分总和
    while (n > 0) {
        string name;
        cin >> name;    //输入课程名称
        map<string, int>::iterator iter = courses.find(name);//查找课程
        if (iter == courses.end()) {    //判断是否找到
            cout << name << " is not available" << endl;
        } else {
            sum += iter->second;    //累加学分
            courses.erase(iter);    //将刚选过的课程从映射中删除
            n--;
        }
    }
    cout << "Total credit: " << sum << endl;    //输出总学分
    return 0;
}
运行结果如下:
C++
COMPILER
C++
C++ is not available
CSAPP
Total credit: 9

例10-11

统计一句话中每个字母出现的次数

// 10_11.cpp
#include <iostream>
#include <map>
#include <cctype>
using namespace std;
int main() {
    map<char, int> s;   //用来存储字母出现次数的映射
    char c;     //存储输入字符
    do {
      cin >> c; //输入下一个字符
      if (isalpha(c)){ //判断是否是字母
          c = tolower(c); //将字母转换为小写
          s[c]++;      //将该字母的出现频率加1
      }
    } while (c != '.'); //碰到“.”则结束输入
    //输出每个字母出现次数
    for (map<char, int>::iterator iter = s.begin(); iter != s.end(); ++iter)
        cout << iter->first << " " << iter->second << "  ";
    cout << endl;
    return 0;
}



下一节:多重集合和多重映射

返回《C++语言程序设计进阶》慕课在线视频列表

映射课程教案、知识点、字幕

大家好

欢迎回来

继续学习C++语言程序设计

这一节我们来学习映射

映射与集合

同属于单重关联容器

它们的主要区别就在于

集合的元素类型是键本身

而映射的元素类型

是由键和附加数据

所构成的二元组

在集合中

按照键查找一个元素的时候

一般只是用来确定

这个元素是否存在

而在映射中呢

要查找一个元素的时候

是按照键

首先找它是否存在

此外呢

还可以得到它相应的附加数据

下面我们就来看一个

使用映射的例子

在五门课里面选择三门课

然后得到它的学分总和

这里我们将课程名

和这个课的学分

作为一个键值对放在这个映射中

我们来看

这个

我们连续将五门课程的课程名

和学分

作为五个键值对插入到课程

course这个映射中

然后呢

我们将可以选课的次数

设为3

学分总和呢初始化为0

接下来呢

如果三次选课还没有选完

也就是n大于0

这个while循环就继续

这个时候呢

首先输入课程名称

然后我们来映射中

去查找有没有这个课程名

如果找不到

那就说没有这门课

这样的话这个循环又开始

继续请输入课程名

再查找

如果找到了

那么就把这个课的学分拿出来

找到了

那就是用这个iter迭代器

指向的对象找到它的学分

把学分累加上去

然后从这个course这个映射中

删除这个iter这个迭代器

指向的这个对象

就把刚选过的课删除了

那么选课机会 选课次数-1

如此循环

把三门课都选好了

这个循环就结束了

最后输出总学分数

这个是某一次运行的时候的情况

接下来的这个例子呢

也用到了映射

统计一句话中

出现的各个字母的次数

首先构造一个映射对象s

用来存储字母出现的次数的映射

然后在这个do while循环中呢

又依次输入字符

直到输入的是点为止

也就是这一句话

都输入完了为止

每次读入一个字符

先判断是否字母

如果是字母的话

不区分大小写

所以就将字母转换为小写

大写 小写的出现次数

都统计到一起

然后接下来怎么样去统计呢

大家看

这里用了下标运算

好象是以c为下标

那这个运算的含义就是

如果在这个映射中

没有出现过c

那么就将c插入到映射中去

如果这个映射中出现了c

就把那一项的引用返回

然后将它的

所以我们这得到的呢

就是c这个字母对应的

它那个项的引用

我们将它的出现次数+1

如此循环往复

直到遇到一个点就结束

这样的话呢

我们就在这个映射中

统计了每个字母的出现次数

最后用一个for循环

从这个映射中

依次输出每个字母

以及它的出现次数

这个循环中是用

迭代器遍历整个映射的

C++语言程序设计进阶课程列表:

第七章 继承与派生

-导学

--导学

-继承的基本概念和语法

--继承的基本概念和语法

-第七章 继承与派生--继承的基本概念和语法习题

-继承方式

--继承方式简介及公有继承

--私有继承和保护继承

-第七章 继承与派生--继承方式

-基类与派生类类型转换

--基类与派生类类型转换

-第七章 继承与派生--基类与派生类类型转换

-派生类的构造和析构

--派生类的构造函数

--派生类的构造函数举例

--派生类的复制构造函数

--派生类的析构函数

--第七章 继承与派生--派生类的构造和析构

-派生类成员的标识与访问

--访问从基类继承的成员

--虚基类

-第七章 继承与派生--派生类成员的标识与访问

-小结

--小结

-综合实例

--第七章综合实例

-实验七

--实验七

-第七章讲义

第八章 多态性

-导学

--导学

-第八章 多态性--导学

-运算符重载

--运算符重载的规则

--双目运算符重载为成员函数

--单目运算符重载为成员函数

--运算符重载为非成员函数

-第八章 多态性--运算符重载

-虚函数

--虚函数

--虚析构函数

--虚表与动态绑定

-第八章 多态性--虚函数

-抽象类

--抽象类

--第八章 多态性--抽象类

-override与final

--override与final

-第八章 多态性--override与final

-小结

--第八章小结

-综合实例

--第八章综合实例

-实验八

--实验八

- 第八章讲义

第九章 模板与群体数据

-导学

--导学

-模板

--函数模板

--类模板

-第九章 模板与群体数据--模板

-线性群体

--线性群体的概念

-第九章 模板与群体数据--线性群体

-数组

--数组类模板

--例9-4数组类应用举例

-链表

--链表的概念与结点类模板

--链表类模板

-第九章 模板与群体数据--链表

-栈

--栈类模板

--栈类模板课后习题

--例9-9 栈的应用

--例9-9 栈的应用课后习题

-队列

--队列类模板

-第九章 模板与群体数据--队列

-排序

--排序概述

--插入排序

--选择排序

--交换排序

-第九章 模板与群体数据--排序

-查找

--查找

--查找课后习题

-小结

--小结

-综合实例

--综合实例

-实验九

--实验九

- 第九章讲义

第十章 泛型程序设计与C++标准模板库

-导学

--导学

-泛型程序设计及STL的结构

--泛型程序设计的基本概念

--STL简介

-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构

-迭代器

--迭代器

-第十章 泛型程序设计与C++标准模板库--迭代器

-容器的基本功能与分类

--容器的基本功能与分类

-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类

-顺序容器

--顺序容器的基本功能

--顺序容器的特征

--顺序容器的插入迭代器与适配器

--第十章 泛型程序设计与C++标准模板库--顺序容器

-关联容器

--关联容器分类和基本功能

--集合

--映射

--多重集合和多重映射

-第十章 泛型程序设计与C++标准模板库--关联容器

-函数对象

--函数对象

--函数适配器

-算法

--算法

-小结

--第十章小结

-综合实例

--综合实例

-实验十

--实验十

- 第十章讲义

第十一章 流类库与输入/输出

-导学

--导学

-I/O流的概念及流类库结构

--I/O流的概念及流类库结构

-第十一章 流类库与输入/输出--I/O流的概念及流类库结构

-输出流

--输出流概述

--向文本文件输出

--向二进制文件输出

--向字符串输出

-第十一章 流类库与输入/输出--输出流

-输入流

--输入流概述

--输入流应用举例

--从字符串输入

-第十一章 流类库与输入/输出--输入流

-输入/输出流

--输入/输出流

-第十一章 流类库与输入/输出--输入/输出流

-小结

--小结

-综合实例

--综合实例

-实验十一

--实验十一

- 第十一章讲义

第十二章 异常处理

-导学

--第12章导学

-异常处理的思想与程序实现

--异常处理的思想与程序实现

-第十二章 异常处理--异常处理的思想与程序实现

-异常处理中的构造与析构

--异常处理中的构造与析构

-第十二章 异常处理--异常处理中的构造与析构

-标准程序库异常处理

--标准程序库异常处理

-第十二章 异常处理--标准程序库异常处理

-小结

--第12章小结

-综合实例

--综合实例

-实验十二

--实验十二

- 第十二章讲义

映射笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。