家族成员查询程序

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

 

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