C++ Primer(第五版) 11.3.1--11.3.2节练习

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值