第十一章 11.3.2节练习
来源:互联网 发布:美姿堂专业彩妆护淘宝 编辑:程序博客网 时间:2024/06/05 17:44
练习11.20
重写11.1节练习(第376页)的单词计数程序,使用insert代替下标操作。你认为哪个程序更融入编写和阅读?解释原因。
解答:
#include <iostream>#include <map>#include <sstream>using namespace std;int main(){map<string, size_t> word_count;string word;while (cin >> word){auto ret = word_count.insert(make_pair(word, 1));if (!ret.second){++ret.first->second;}}for (const auto &w : word_count){cout << w.first << " occurs " << w.second<< ((w.second > 1) ? " times" : " time") << endl;}return 0;}通过insert的返回值来做这道题。代码书上已经给出,不过需要详细的看一下 “检测insert的返回值”这一节。
练习11.21
界定word_count是一个string到size_t的map,word是一个string,解释下面循环的作用:
while(cin >> word) ++word_count.insert({word, 0}).first->second;解答:
while (cin >> word){auto ret = word_count.insert(make_pair(word, 1));if (!ret.second){++ret.first->second;}}这段循环其实就是对上面代码的简写。
下面分步解释下:
{word, 0} // 一个列表,可以将其看做为一个pair
word_count.insert({word, 0}) //将这个pair插入到map中,并插入的pair
word_count.insert({word, 0}).first<span style="font-family: Arial, Helvetica, sans-serif;">->second </span>// 得到pair中的第二个值,也就是计数值
++word_count.insert({word, 0}).first->second; //将计数值加1。当原有map中没有该word的时候,计数值应为1;有的话则继续累加。
在书中385页,也有分步的解释。
练习11.22
给定一个map<string, vector<int>>,对此容器的插入一个元素的insert版本,写出其参数类型和返回类型。
解答:
参照之前的几道题,这道题目就很好回答了。
参数类型{string,vector<int>}或make_pair(string, vectot<int>),pair<string, vector<int>(..., ...)>, map<string, vector<int>>::value_type(..., ...)
返回类型pair<string, vector<int>>
练习11.23
11.2.1节练习(第378页)中的map以孩子的姓为关键字,保存他们的名用vector,用multimap重写此map。
解答:
#include <iostream>#include <map>#include <string>using namespace std;int main(){multimap<string, string> family;string family_name, giving_name;while (cin >> giving_name){cin >> family_name;family.insert(pair<string, string>(family_name, giving_name));}for (multimap<string, string>::iterator it = family.begin();it != family.end(); ++it){cout << it->first << " " << it->second << endl;}return 0;}之前就是用multimap来写的,所以直接粘过来了XD
0 0
- 第十一章 11.3.2节练习
- 第十一章 11.3.1节练习
- 第十一章 11.3.4节练习
- 第十一章 11.3.5节练习
- 第十一章 11.3.6节练习
- 第十一章 11.2.2节练习
- 第十一章 11.1节练习
- 第十一章 11.4节练习
- 第十一章编程练习(2)
- 第十一章 11.2.1节练习
- 第十一章 11.2.3节练习
- C primer plus 第十一章 练习2:
- SQL第十一章 上机练习2
- 第十一章:练习12
- 第十一章上机练习
- 第十一章练习
- simply scheme 第十一章 练习
- 第十一章编程练习(1)
- ZOJ Problem Set - 1203
- hdu 3068最长回文子串
- Android应用程序的编译和打包
- C++11(4):语句
- C++ 中list 类模板的简易实现
- 第十一章 11.3.2节练习
- mybatis与hibernate区别
- libpcap的安装、工作原理及流程(引用综合)
- css 相对浏览器动态居中
- if 语句1 条件语句用于测试条件。
- Perl 工作积累(不定期更新)
- 单链表整表创建和整表删除
- LightOj 1002 - Country Roads
- dedecms