https://github.com/jzplp/Cpp-Primer-Answer
- 练习11.1
 map用关键字索引,是一个字典。vector用整数索引,是一个列表。
- 练习11.2
 list 链表
 vector 顺序列表
 deque 双端队列
 map 字典
 set 集合
- 练习11.3
 11.3 map单词计数程序代码
- 练习11.4
 11.4 去标点map单词计数程序代码
- 练习11.5
 如果关键字有对应的值就用map,只有关键字就用set
- 练习11.6
 set是按照关键字索引读取的,list只能是用迭代器读取的。
 顺序存储可以选list,需要关键字索引可以用set
- 练习11.7
 11.7程序代码
- 练习11.8
 11.8程序代码 使用set的优势是不需要手动去除重复元素
- 练习11.9
std::map<std::string, std::list<size_t>> m;- 练习11.10
 可以定义vector::iterator到int的map,前提是实际的关键字必须来自同一容器。
 不可以定义list::iterator到int的map,因为关键字类型没有定义<操作
- 练习11.11
multiset<Sales_data, bool (*)(const Sales_data &, const Sales_data &)>- 练习11.12
 11.12程序代码
- 练习11.13
 11.13 make_pair程序代码11.13 构造pair程序代码11.13 列表初始化构造pair程序代码
- 练习11.14
 11.14程序代码
- 练习11.15
mapped_type     vector<int>
key_type        int
value_type      pair<const int, vector<int>>- 练习11.16
iter->second = value;- 练习11.17
- 不合法
- 不合法
- 合法
- 合法
- 练习11.18
std::map<const std::string, size_t>::iterator- 练习11.19
std::multiset<Sales_data, bool (*)(const Sales_data &, const Sales_data &)>::iterator mp = bookstore.begin();答案书中的pair迭代器错误。
- 练习11.20
 11.20 insert改写单词计数程序代码
- 练习11.21
 循环输入单词,添加到map中作为关键字,如果是新加入的则设置值为1,以前加入的则设置为当前值+1
- 练习11.22
参数类型:
{std::string, std::vector<int>}
返回类型:
std::pair<std::map<std::string, std::vector<int>>::iterator, bool>- 练习11.23
 11.23 用multimap重写11.14程序代码
- 练习11.24
 创建一个map,并添加一个{0,1}元素
- 练习11.25
 创建一个vector,第二句话错误。
- 练习11.26
 用key_type对map进行下标操作。下标运算符返回的类型是mapped_type
 例子:
std::map<std::string, zise_t> m;
m[std::string("str")] = 1;- 练习11.27
 需要查找关键字有几个时用count,仅仅需要知道关键字在不在容器中时用find
- 练习11.28
std::map<std::string, std::vector<int>> m;
std::map<std::string, std::vector<int>>::iterator = m.find(str);- 练习11.29
 他们全部返回大于该关键字的第一个元素,如果不存在则返回尾迭代器
- 练习11.30
 pos.first是一个迭代器,指向当前使用的元素。
 pos.first->second 取出当前使用的元素的值。
- 练习11.31
 11.31程序代码
- 练习11.32
 11.31答案代码中已经实现了按照字典序打印
 11.31程序代码
- 练习11.33
 11.33 单词转换程序代码
- 练习11.34
 首先,find替换为下标运算符,如果map中没有s,程序会在map中创建关键字s并初始化值为空。
 其次,下标运算符会返回map中的值,也就是说如果map中没有s,那么就返回一个空字符串。
- 练习11.35
 如果存在重复关键字,则只插入第一个出现的关键字和值。
- 练习11.36
 会出现如下的错误:
terminate called after throwing an instance of 'std::runtime_error'
  what():  no rule for 5- 练习11.37
 无序容器不用定义比较操作,而且可能比有序容器要快。
 有序容器不用定义hash模板。
- 练习11.38
 11.38 unordered_map改写单词计数程序代码11.38 unordered_map改写单词转换程序代码










