5383: C++实验:STL之multimap
描述
使用STL中的multimap记录用户的所有电话号码,yuyu想查询用户有多少个电话号码,crq则想查询时输出所有的号码。
部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。
- C++
int main() { multimap<string, string> sm; string name, phone; int n; cin>>n; while(n--) { cin>>name>>phone; sm.insert(make_pair(name, phone)); } YuYuSearch(sm); CrqSearch(sm); return 0; }
输入
输入数据第一行为n,表示有n条姓名和对应号码记录。
接下来有n行,每行一个姓名和电话号码。
接下来一行为正整数m,下面的m行中每行为yuyu想查询的姓名。
接下来一行为正整数k,下面的k行中每行为crq想查询的姓名。
输出
对于yuyu想查询的姓名,输出该姓名有多少个电话号码,每行一个数。
对于crq想查询的姓名,输出该姓名所有的电话号码(按输入的顺序),每行一个电话号码,如果不存在则输出None。
样例输入
3
crq 13512345678
yuyu 15988888888
crq 0576-12345678
3
crq
yuyu
kangkang
2
crq
yuyu
样例输出
2
1
0
13512345678
0576-12345678
15988888888
注意:这个程序里的make_pair是生成一个有序对的意思,这个对里包含了姓名和电话,并非需要我们自定义的函数,所以在主函数里的
sm.insert(make_pair(name, phone));
是生成一个包含name和phone的有序对, 再将这个对插入到sm中
完整代码:
#include<bits/stdc++.h> using namespace std; void YuYuSearch(multimap<string,string> &sm) { multimap<string,string>::iterator it; int t; cin >> t; while(t--) { int k = 0; string s;cin >> s; for(it = sm.begin(); it != sm.end(); it++) { if(it->first == s)k++; } cout << k << endl; } } void CrqSearch(multimap<string,string> &sm) { multimap<string,string>::iterator it; int t; cin >> t; while(t--) { string s; cin >> s; int f = 0; for(it = sm.begin(); it != sm.end(); it++) { if(it->first == s) { f = 1; cout << it->second << endl; } } if(!f)cout << "None" << endl; } } int main() { multimap<string, string> sm; string name, phone; int n; cin>>n; while(n--) { cin>>name>>phone; sm.insert(make_pair(name, phone)); } YuYuSearch(sm); CrqSearch(sm); return 0; }