題目:定義一個map對象,其元素的鍵是家族姓氏,而值是存儲該家族孩子名字的vector對象。為這個map容器輸入至少六個條目。通過基於家族姓氏的查詢檢測你的程序,查詢應輸出該家族所有孩子的名字。
//定義一個map對象,其元素的鍵是家族姓氏
//而值則是存儲該家族孩子名字的vector對象
//進行基於家族姓氏的查詢,輸出該家族所有孩子的名字
#include<iostream>
#include<map>
#include<vector>
#include<string>
using namespace std;
int main()
{
map<string , vector<string> > children;
string surname , childName;
//讀入條目(家族姓氏及其所有孩子的名字)
do{
cout<<"Enter surname: "<<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: "<<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;
}