练习11.5 对一个Int到vector<int>的map,其mapped_type、key_type、和value_type分别是什么?
形如map<int,vector<int>> q;
mapped_type是vector<int> 类型,key_type是Int类型,value_type是pair<int,vector<int>>类型。
练习11.16 使用一个map迭代器编写一个表达式,将一个值赋予一个元素。
#include <iostream>
#include <string>
#include <map>
#include <iterator>
using namespace std;
int main()
{
map<string, int> map_si = { {"we",7},{"will",77},{"rock",777},{"it",7777} };
auto map_iter = map_si.begin();
int zero = 0;
// 将rock对应的值重新赋值。
while (map_iter != map_si.cend()) {
if (map_iter->first == "rock") {
map_iter->second = zero;
}
++map_iter;
}
for (auto &i : map_si) {
cout << i.first << ": " << i.second << endl;
}
return 0;
}
练习 11.17 假定c是一个string的multiset,v是一个string的vector,解释下面的调用。指出每个调用是否合法。
1) copy(v.begin(),v.end(),inserter(c,c.end()));
2) copy(v.begin(),v.end(),back_inserter(c));
3) copy(v.begin(),v.end(),inserter(v,v.end()));
4) copy(v.begin(),v.end(),back_inserter(v));
第 2)错误。 multiset容器并没有push_back()迭代器可调用。
练习 11.18 写出第382页循环中map_it的类型,不要使用auto或decltype。
#include <iostream>
#include <map>
#include <string>
#include <iterator>
using namespace std;
int main()
{
map<string, int> map_si{ {"Paul",3},{"Curry",30} };
map<string, int>::iterator map_it = map_si.begin();
while (map_it != map_si.cend()) {
cout << map_it->first << " " << map_it->second << endl;
++map_it;
}
return 0;
}
练习11.19 定义一个变量,通过对11.2.2节(第378页)中的名为bookstore的multiset调用begin()来初始化这个变量。写出变量的类型,不要使用auto 或decltype。
// = 0 = 越来越看不懂了 我好弱 T^T
(多看一下书就懂啦。。)
//Salesd_data.h数据不在,只列出部分代码
//已知 compareIsb函数的定义.
multiset<Sales_data, bool(*pf)(const Sales_data&, const Sales_data&)>bookstore(compareIsbn);
Sales_data item;
multiset<Sales_data, bool(*pf)(const Sales_data&, const Sales_data&)>::iterator iter = bookstore.begin();
item = *iter;