练习11.12 编写程序,读入string和int的序列,将每string和int存入一个pair中,保存在一个vector中。
#include <iostream>
#include <vector>
#include <utility>
#include <string>
using namespace std;
int main()
{
pair<string, int> pair_si;
vector<pair<string, int>> pair_vec;
string s;
int i;
while (cin >> s >> i) {
pair_si = { s,i };
pair_vec.push_back(pair_si);
}
for (auto &c : pair_vec) {
cout << c.first << " " << c.second << endl;
}
return 0;
}
练习11.13 在上一题的程序中,至少有三种创建pair的方法。编写次程序的三个版本,分别采用不同的方法创建pair。解释你认为哪种形式最易于编写和理解,为什么?
#include <iostream>
#include <vector>
#include <string>
#include <utility>
using namespace std;
int main()
{
pair<string, int> pair_si;
vector<pair<string, int>> pair_vec;
string s;
int i;
while (cin >> s >> i) {
pair_si = { s,i }; //最简洁。
pair_vec.push_back(pair_si);
pair<string, int>pair_si(s, i);
pair_vec.push_back(pair_si);
pair_si = make_pair(s, i); // 这个排第一, 在大程序中 应该最清晰,指出返回pair类型。
pair_vec.push_back(pair_si);
pair_si.first = s;
pair_si.second = i;
pair_vec.push_back(pair_si);
}
for (auto &c : pair_vec) {
cout << c.first << " " << c.second << endl;
}
return 0;
}
练习11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名字和生日。
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <utility>
using namespace std;
int main()
{
map<string, vector<string>> name = {
{ "Paul",{ "Pierce","Christ" } },
{ "Green",{ "Jogre" } }
};
pair<string, int> child;
vector<pair<string, int>> child_bir;
string fir, sec;
int bir;
while (cin >> fir >> sec >> bir) {
//利用Push_back往容器添加元素。
name[fir].push_back(sec);
// 将完整的名字及其生日保存到child
child = { fir + " " +sec, bir };
child_bir.push_back(child);
}
for (auto &i : child_bir) {
cout << i.first << ": " << i.second << endl;
}
return 0;
}