家族成員查詢程序

這是《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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章