/*
利用stl::multimap查找共同好友 |
利用multimap模版查找共同好友并输出 | | 要查找的所有记录个数 所有记录 要查找多少人的共同好友 这些人的姓名 | | 共同好友的全部信息(包括string name;int num;int age;)按照num排序输出,如果没有,输出NO | | 6 张潮 刘磊 902419 22 王磊 赵磊 902429 22 张潮 张平一 902436 21 李平一 白上由 902422 22 王浩 王洗星 902420 20 王浩 张平一 902436 21 2 张潮 王浩 | | 张平一 902436 21 | | 相同好友是指 姓名 学号 年龄 全部相同 | | |
| |
| |
| |
|
*/
#include <iostream>
#include<map>
#include<string>
using namespace std;
typedef struct Info
{
string Name;
int Num;
int Age;
};
int main()
{
multimap<string,Info> match;
multimap<int,Info> forMatch;
string name1;
multimap<string,Info>::iterator it;
multimap<int,Info>::iterator it1;
pair< multimap<string,Info>::iterator, multimap<string,Info>::iterator> ret;
Info info1,info2,info0;
int N;
cin>>N;
for (int i=0; i<N; i++)
{
cin>>name1>>info0.Name>>info0.Num>>info0.Age;
match.insert(pair<string,Info>(name1,info0));
}
cin>>N;
string Str;
cin>>Str;
int toKey=0;
ret=match.equal_range(Str);
for (it=ret.first; it!=ret.second; ++it)
{
toKey=(*it).second.Num;
(*it).second.Num=1;
forMatch.insert(pair<int,Info>(toKey,(*it).second));
}
for (int i=1; i<N; i++)
{
cin>>Str;
ret=match.equal_range(Str);
for(it1=forMatch.begin(); it1!=forMatch.end(); ++it1)
{
for (it=ret.first; it!=ret.second; ++it)
{
if (((*it).second.Name==(*it1).second.Name)&&((*it).second.Num==(*it1).first)&&((*it).second.Age==(*it1).second.Age))
(*it1).second.Num++;
}
}
}
for(it1=forMatch.begin(); it1!=forMatch.end(); ++it1)
{
if ((*it1).second.Num>=N)
cout<<(*it1).second.Name<<" "<<(*it1).first<<" "<<(*it1).second.Age<<endl;
}
return 0;
}