【C++ Primer备忘录】习题10.18

来源:互联网 发布:360淘宝装修平台 编辑:程序博客网 时间:2024/06/11 10:39

习题10.18

定义一个map对象,其元素的键是家族姓氏,值是存储该家族孩子名字的vector对象。为这个map插入至少6个条目。通过基于家族姓氏的查询检查你的程序,查询应输出该家族所有孩子的名字。

#include <iostream>#include <string>#include <map>#include <vector>#include <utility>using namespace std;typedef vector<string> vstring;int main(){map<string,vstring> family;string fname,cname,index;        //用do while可以保证程序能正确分别输入的fname和cname        do{cout<<"家庭姓氏:";cin>>fname;        //chilren用来存储孩子的姓名,ret返回查询map中键为fname的值是否存在,如果存在就返回fname的迭代器,如果不存在返回family.end()vector<string> chilren;//这里开始用pair<map<string,vstring>,bool> ret = family.insert(make_pair(fname,chilren));  但是错了,还没搞明白原因map<string,vstring>::iterator ret = family.find(fname);        <span style="white-space:pre"></span>if(ret != family.end()){        //此处可扩展为如果fname存在则让玩家选择是否在该家庭内新增孩子cout<<"姓氏已存在!是否继续(Y/N):";cin>>index;if(index == "Y" || index == "y"){continue;cin.clear();}elsebreak;}else{cout<<"输入孩子姓名(Quit退出):";while(cin>>cname ){if(cname != "Quit"){cout<<"输入孩子姓名(Quit退出):";chilren.push_back(cname);}elsebreak;}family.insert(make_pair(fname,chilren));cin.clear();cout<<"是否继续(Y/N):";cin>>index;if(index == "Y" || index == "y"){continue;cin.clear();}elsebreak;}}while(cin);cin.clear();//查询cout<<"请输入要查询的家庭姓氏:";cin>>fname;map<string,vstring>::iterator ret = family.find(fname);if(ret != family.end()){cout<<"要查询的孩子为:";vector<string>::iterator ite=ret->second.begin();while(ite != ret->second.end())cout<<*ite++<<" ";}elsecout<<"没有您要查询的家庭!"<<endl; system("pause");} 


10.19

对10.18做了拓展,使其vector存储一个pair对象来放孩子的姓名和生日

typedef vector< pair<string,string> > vstring;int main(){map<string,vstring> family;string fname,cname,index,birth;do{cout<<"家庭姓氏:";cin>>fname;vector< pair<string,string> > chilren;map<string,vstring>::iterator ret = family.find(fname);if(ret != family.end()){cout<<"姓氏已存在!是否继续(Y/N):";cin>>index;if(index == "Y" || index == "y"){continue;cin.clear();}elsebreak;}else{cout<<"输入孩子姓名和生日(ctrl+z退出):";while(cin>>cname>>birth ){cout<<"输入孩子姓名和生日:";chilren.push_back(make_pair(cname,birth));}//make_pair用的是()而不是<>..... family.insert(make_pair(fname,chilren));cin.clear();cout<<"是否继续(Y/N):";cin>>index;if(index == "Y" || index == "y"){continue;cin.clear();}elsebreak;}}while(cin);cin.clear();//查询cout<<"请输入要查询的家庭姓氏:";cin>>fname;map<string,vstring>::iterator ret = family.find(fname);if(ret != family.end()){cout<<"要查询的孩子为:";vector< pair<string,string> >::iterator ite=ret->second.begin();while(ite != ret->second.end()){cout<<(ite->first)<<" "<<(ite->second)<<endl;ite++;}}elsecout<<"没有您要查询的家庭!"<<endl;



0 0
原创粉丝点击