C++Primer第五版 第十一章习题答案(31~38)
2017-03-02 09:34
357 查看
31:知识点:在multimap中,具有相同关键字的元素会相邻存储
32:知识点:对于set,系统能根据元素的值自动进行排序
33:书中程序已经非常好了,建议自行手敲一遍,实现即可
34:下标操作,当元素不存在时会隐式的创建一个新元素插入到map中,修改了map
35:如果重复出现多次同样的key值 ,用下标操作后面的value会替换前面的value,而insert则不会替换
36:不会受到影响,因为仅包含一个key和一个空格,buildmap函数中判断value.size()<=1, 即后面没有value则抛出异常
37:知识点1:
无序版本优势:当容器中key没有明显的顺序关系时更有用,且不需要耗费多余的时间来维护容器中的key序列
有序版本优势:当容器中key有明显的顺序关系时更有用,且我们不需要考虑排序问题,容器自动维护序列(字典序)
知识点2:map的key_value是有序的,set本身就是有序的,有序容器的操作可以用于无序容器
知识点3:无序容器访问元素时,首先计算元素的哈希值,它指出应该搜索那个桶,因为容器讲哈细致相同的元素放在一个桶中,注意表11.8的各项操作
38:貌似是没有任何变化的,用这个无序容器应该是不影响操作的
#include<iostream> #include<string> #include<fstream> #include<list> #include<vector> #include<map> #include<set> #include<cctype>//ctype无法打开,包含tolower()函数和ispunct函数 #include<algorithm> #include<utility>//保存pair的头文件 using namespace std; int main(int argc, char**argv) { string author = "机械先驱"; multimap<string, string> Library; Library.insert(make_pair(author,"灭世者的帽子")); Library.insert(make_pair(author,"法穿杖")); Library.insert(make_pair(author,"法穿鞋")); Library.insert(make_pair(author,"冰杖")); Library.insert(make_pair(author,"巫妖之祸")); Library.insert(make_pair(author,"海克斯科技核心")); auto it1 = Library.find(author); //返回第一个关键字为author的迭代器 auto it2 = Library.count(author);//返回关键词为author的元素数量 while (it2) { if (it1->second == "海克斯科技核心") { Library.erase(it1);//直接删除此关键字值对,传入参数为指向它的迭代器 break;//需要,不然下面调用到已经删除的迭代器,会出粗 } ++it1; --it2; } multimap<string,string>::iterator it3 = Library.begin(); for (it3; it3 != Library.end(); ++it3) { cout<<it3->first<<"的宝贝儿:"<<it3->second<<endl; } return 0; }
32:知识点:对于set,系统能根据元素的值自动进行排序
#include<iostream> #include<string> #include<fstream> #include<list> #include<vector> #include<map> #include<set> #include<cctype>//ctype无法打开,包含tolower()函数和ispunct函数 #include<algorithm> #include<utility>//保存pair的头文件 using namespace std; int main(int argc, char**argv) { string author = "机械先驱"; string author1 = "卡牌大师"; multimap<string, string> Library; Library.insert(make_pair(author1,"灭世者的帽子")); Library.insert(make_pair(author,"法穿杖")); Library.insert(make_pair(author1,"法穿鞋")); Library.insert(make_pair(author,"冰杖")); Library.insert(make_pair(author,"巫妖之祸")); Library.insert(make_pair(author,"海克斯科技核心")); auto it1 = Library.find(author); //返回第一个关键字为author的迭代器 auto it2 = Library.count(author);//返回关键词为author的元素数量 while (it2) { if (it1->second == "海克斯科技核心") { Library.erase(it1);//直接删除此关键字值对,传入参数为指向它的迭代器 break;//需要,不然下面调用到已经删除的迭代器,会出粗 } ++it1; --it2; } map<string,set<string>> Library2;//排序所用map,set可自动排序 multimap<string,string>::iterator it3 = Library.begin(); for (it3; it3 != Library.end(); ++it3) { /*Library2.insert(make_pair(it3->first,it3->second));*/ Library2.[it3->first].insert(it3->second); cout<<it3->first<<"的宝贝儿:"<<it3->second<<endl; } map<string,set<string>>::iterator it4 = Library2.begin(); for (it4;it4 != Library2.end(); ++it4) { cout<<it4->first<<"的宝贝儿:"; set<string>::iterator it5 = it4->second.begin(); for(it5; it5 != it4->second.end(); ++it5) { cout<<*it5<<","; } } return 0; }
33:书中程序已经非常好了,建议自行手敲一遍,实现即可
34:下标操作,当元素不存在时会隐式的创建一个新元素插入到map中,修改了map
35:如果重复出现多次同样的key值 ,用下标操作后面的value会替换前面的value,而insert则不会替换
36:不会受到影响,因为仅包含一个key和一个空格,buildmap函数中判断value.size()<=1, 即后面没有value则抛出异常
37:知识点1:
无序版本优势:当容器中key没有明显的顺序关系时更有用,且不需要耗费多余的时间来维护容器中的key序列
有序版本优势:当容器中key有明显的顺序关系时更有用,且我们不需要考虑排序问题,容器自动维护序列(字典序)
知识点2:map的key_value是有序的,set本身就是有序的,有序容器的操作可以用于无序容器
知识点3:无序容器访问元素时,首先计算元素的哈希值,它指出应该搜索那个桶,因为容器讲哈细致相同的元素放在一个桶中,注意表11.8的各项操作
38:貌似是没有任何变化的,用这个无序容器应该是不影响操作的
相关文章推荐
- C++Primer第五版 第十章习题答案(31~40)
- C++Primer第五版 第四章习题答案(11~20)
- C++Primer第五版 第四章习题答案(31~38)
- C++Primer第五版 第六章习题答案(1~10)
- C++Primer第五版 第二章习题答案(11~20)
- C++Primer第五版 第五章习题答案(11~20)
- C++Primer第五版 第七章习题答案(11~20)
- C++Primer第五版 第六章习题答案(11~20)
- C++Primer第五版 第十三章习题答案(11~20)
- c++ primer plus第十一章习题答案
- c++ primer第五版(中文)习题答案 第三章第二节-标准库类型string
- C++Primer第五版 第十六章习题答案(61~67)
- c++ primer plus第九章习题答案
- C++primer第七章习题答案
- C++ primer plus(第六版)学习笔记、习题答案(5)
- C++ primer plus(第六版)学习笔记、习题答案(3)
- C++primer第5版课后练习习题答案9.52
- C++ Primer Plus第六版 第十一章 编程练习答案
- c++ PrimerPlus 第六版中文版编程习题答案
- C++ primer plus(第六版)学习笔记、习题答案(1)