11.15 map<int, vector<int>> //mapped_type: vector<int>; key_type: int; value_type: pair<const int, vector<int>>
11.16
map<int, int> m;
auto it = m.begin();
it->second = 42;
11.17 set的迭代器是const的,只允许只读访问set中的元素,因此前两个非法;后两个将set中的元素复制到vector中,合法。
11.18 pair<const string, size_t>::iterator
11.19
multiset<Sales_data, decltype(compareIsbn)*> bookstore(compareIsbn);
pair<const Sales_data, decltype(compareIsbn)*> iter = bookstore.begin();
11.20
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
map<string, size_t> word_cnt;
cout << "Input words: " << endl;
string word;
while (cin >> word) {
if (isupper(word[0]))
word[0] = tolower(word[0]);
if (ispunct(word[word.size()-1]))
word.pop_back();
//++word_cnt[word];
auto ret = word_cnt.insert({word, 1});
if (!ret->second)
++ret->second;
}
for (const auto &w : word_cnt)
cout << w.first << " occurs " << w.second
<< ((w.second > 1)? " times" : " time") << endl;
return 0;
}
11.21 word_count.insert({word, 0}),返回一个pair, pair.first是一个迭代器,指向具有指定关键字的元素, 即word_count.insert({word, 0}).firs的类型:pair<const string, size_t>:: iterator 故word_count.insert({word, 0}).first->second的类型:size_t,前置++表示递增计数值。若元素不在map中,则计数值为1,若已经在map中,则递增。
11.22 c.insert(v)
参数v的类型:value_type型对象,即pair<const string, vector<int>>
返回类型:pair<map<string, vector<int>>::iterator, bool>
11.23
#include <iostream>
#include <map>
using namespace std;
void add_kid(multimap<string, string> &families, const string &family, const string &kid)
{
families.insert({family, kid});
}
int main()
{
multimap<string, string> families;
add_kid(families, "Li", "Jim");
add_kid(families, "Li", "Jack");
add_kid(families, "Wang", "Lucy");
for (auto f : families) {
cout << f.first << ": ";
cout << f.second << endl;
}
return 0;
}