//定义个map对象,其元素的键是家族姓氏,
//而值则是存储该家庭孩子名字的vector对象、
//进行基于家族姓氏的查询,输出该家庭所有孩子的名字
#include <iostream>
#include <utility>
#include <map>
#include <vector>
#include <string>
using namespace std;
int main()
{
map<string, vector<string> > children;
string surname, childName;
//读入条目(家族姓氏及其所有孩子的名字)
do
{
cout << "Enter surname(Ctrl+Z to end):" << endl;
cin >> surname;//读入姓氏
if (!cin) //读入结束
{
break;
}
//插入新条目
vector<string> chd;
pair< map<string, vector<string> >::iterator, bool> ret =
children.insert(make_pair(surname, chd));
if (!ret.second)//该家族姓氏已在map容器中存在
{
cout << "repeated surname: " << surname << endl;
continue;
}
cout << "Enter children's name(Ctrl+Z to end):" << endl;
while (cin >> childName)//读入该家族所有孩子的名字
{
ret.first ->second.push_back(childName);
}
cin.clear();//使输入流重新有效
}
while (cin);
cin.clear();//使输入流重新有效
//读入要查询的家族
cout << "Enter a surname to search:" << endl;
cin >> surname;
//根据读入的家族姓氏进行查找
map< string, vector<string> >::iterator iter =
children.find(surname);
//输出查询结果
if (iter == children.end())//找不到该家族姓氏
{
cout << "no this surname: " << surname << endl;
}
else//找到了该家族姓氏
{
cout << "children: " << endl;
//输出该家族中的所有孩子的名字
vector<string>::iterator it = iter->second.begin();
while (it != iter->second.end())
{
cout << *it++ << endl;
}
}
return 0;
}