当前位置:编程学习 > C/C++ >>

map对象建立家族姓氏查询

 
题目:定义一个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;  
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,