C++Primer11.2.3节练习

练习11.12:

#include <iostream>
using namespace std;
#include <map>
#include <string>
#include <set>
#include <list>
#include <vector>
#include <algorithm>
#include <utility>


int main()
{
	string word;
	int num, i = 10;
	//存pair对
	vector<pair<string, int>>vp;
	//读取10个string和int对
	while (i != 0 && cin >> word && cin >> num)
	{
		//构建pair并存入vector
		vp.push_back(make_pair(word, num));
		--i;

	}

	//打印
	for (const auto& pr : vp)
	{
		cout << "\"string\" :" << pr.first << "   \"int\" :" << pr.second << endl;
	}
	cout << endl;
	system("pause");
	return 0;
}

练习11.13:

第一种方法:make_pair

第二种方法:显式初始化

第三种方法:列表初始化

第三种方法最易于编写,第二种方法易于理解

    //第一种方法:
	string word;
	int num, i = 10;
	//存pair对
	vector<pair<string, int>>vp;
	//读取10个string和int对
	while (i != 0 && cin >> word && cin >> num)
	{
		//构建pair并存入vector
		vp.push_back(make_pair(word, num));
		--i;

	} 


    //第二种方法:
    string word;
	int num, i = 10;
	//存pair对
	vector<pair<string, int>>vp;
	//读取10个string和int对
	while (i != 0 && cin >> word && cin >> num)
	{
		//构建pair并存入vector
		vp.push_back(pair<string,int>(word, num));
		--i;

	}

    
    //第三种方法:
    string word;
	int num, i = 3;
	//存pair对
	vector<pair<string, int>>vp;
	//读取10个string和int对
	while (i != 0 && cin >> word && cin >> num)
	{
		//构建pair并存入vector
		vp.push_back({word,num});
		--i;

	}

 练习11.14:

#include <iostream>
using namespace std;
#include <map>
#include <string>
#include <set>
#include <vector>

//打印map
void printFamily(map<string, vector<pair<string, unsigned int>>>& mf)
{
	for (const auto& family : mf)
	{
		cout << family.first << " 家的成员:" << endl;
		for (const auto& member : family.second)
		{
			cout << family.first << "." << "" << member.first << " born in : " << member.second << endl;
		}
		cout << endl;
	}
}



int main()
{
	vector<pair<string, int>>born;
	map<string, vector<pair<string, unsigned int>>>mFamily = {
		{"li", { {"lucy",20201010},{"jack",20201011},{"fuck",20201012} }},
		{"bao",{{"Bob",20201013},{"chathy",20201014},{"Daive",20201015}}},
		{"wang",{{"joy",20201016},{"litter",20201017},{"saiwen",20201018}}}
	};
	cout << "原始家族:" << endl;
	printFamily(mFamily);

	//添加新孩子1
	string first_name = "wang";
	string last_name = "baibai";
	unsigned int br = 20201019;
	//使用显式初始化
	mFamily[first_name].push_back(pair<string, unsigned int>(last_name, br));
	cout << "添加孩子1后:" << endl;
	printFamily(mFamily);

	//添加新孩子2
	first_name = "bao";
	last_name = "feifei";
	br = 20201020;
	//使用列表初始化
	mFamily[first_name].push_back({ last_name,br });
	cout << "添加孩子2后:" << endl;
	printFamily(mFamily);

	//添加新孩子3
	first_name = "wang";
	last_name = "jiji";
	br = 20201021;
	//使用make_pair
	mFamily[first_name].push_back(make_pair(last_name, br));
	cout << "添加孩子3后:" << endl;
	printFamily(mFamily);

	system("pause");
	return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学C++.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值