這是《C++ Primer》第四版上的10-18習題,我感覺值得我認真去學習其中的語法點和用法。
定義一個map對象,其元素的鍵是家族姓氏,而值則是存儲該家族孩子名字的vector對象。爲這個map容器輸入
至少6個條目。通過基於家族姓氏的查詢檢測你的程序,查詢應輸出該家族所有孩子的名字。
//10-18.cpp
//定義一個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(crtl+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;
}