- <table width="100%"><tbody><tr><td>标题:</td><td>利用stl::multimap查找共同好友</td></tr><tr><td>时 限:</td><td>1000 ms</td></tr><tr><td>内存限制:</td><td>10000 K</td></tr><tr><td>总时限:</td><td>3000 ms</td></tr><tr><td>描述:</td><td>利用multimap模版查找共同好友并输出</td></tr><tr><td>输入:</td><td><p align="left">要查找的所有记录个数</p><p align="left">所有记录</p><p align="left">要查找多少人的共同好友</p>这些人的姓名</td></tr><tr><td>输出:</td><td>共同好友的全部信息(包括string name;int num;int age;)<strong><span style="color:#ff0000;">按照num排序输出</span></strong>,如果没有,输出NO</td></tr><tr><td>输入样例:</td><td><p align="left">6</p><p align="left">张潮 刘磊 902419 22</p><p align="left">王磊 赵磊 902429 22</p><p align="left">张潮 张平一 902436 21</p><p align="left">李平一 白上由 902422 22</p><p align="left">王浩 王洗星 902420 20</p><p align="left">王浩 张平一 902436 21</p><p align="left">2</p>张潮 王浩</td></tr><tr><td>输出样例:</td><td><a name="OLE_LINK3">张平一 902436 21</a></td></tr><tr><td>提示:</td><td>相同好友是指 姓名 学号 年龄 全部相同</td></tr></tbody></table>
- #include <iostream>
- using namespace std;
- #include <map>
- #include <string>
- class FriendMessages
- {
- public:
- FriendMessages(string name = "",int num = 0,int age = 0)
- {
- this->age = age;
- this->name = name;
- this->num = num;
- }
- void Print()
- {
- cout<<name<<' '<<num<<' '<<age<<endl;
- }
- bool operator == (FriendMessages comp)
- {
- return ((comp.age == age) &&(comp.name == name) && (comp.num == num));
- }
- bool operator != (FriendMessages comp)
- {
- return !((comp.age == age) &&(comp.name == name) && (comp.num == num));
- }
- int num;///
- private:
- string name;
- int age;
- };
- class Problem
- {
- public:
- Problem();
- void Solved();
- private:
- int x,y;
- struct testFriendMessages
- {
- FriendMessages FM;
- int num;
- };
- multimap<string,FriendMessages> messages;
- multimap<int,testFriendMessages> comFriend;
- };
- Problem::Problem()
- {
- cin>>x;
- int iTemp = x;
- while (iTemp--)
- {
- string name,friName;
- int num,age;
- cin>>name>>friName>>num>>age;
- FriendMessages FMTemp(friName,num,age);
- messages.insert(pair<string,FriendMessages>(name,FMTemp));
- }
- }
- void Problem::Solved()
- {
- cin>>y;
- int iTemp = 0;
- while(iTemp < y)
- {
- string name;
- cin>>name;
- pair< multimap<string,FriendMessages>::iterator,
- multimap<string,FriendMessages>::iterator > p;
- p = messages.equal_range(name);
- if (!iTemp)
- {
- multimap<string,FriendMessages>::iterator it = p.first;
- for(;it != p.second;it++)
- {
- testFriendMessages tFMTemp;
- tFMTemp.FM = it->second;
- tFMTemp.num = 1;
- comFriend.insert(pair<int,testFriendMessages>(tFMTemp.FM.num,tFMTemp));
- }
- }
- else
- {
- multimap<string,FriendMessages>::iterator it = p.first;
- for(;it != p.second;it++)
- {
- multimap<int,testFriendMessages>::iterator q = comFriend.begin();
- for (;q != comFriend.end();q++)
- {
- if (q->second.FM == it->second)
- {
- q->second.num++;
- }
- }
- }
- }
- iTemp++;
- }
- multimap<int,testFriendMessages>::iterator q = comFriend.begin();
- for (;q != comFriend.end();q++)
- {
- if (q->second.num >= y)
- {
- q->second.FM.Print();
- }
- }
- }
- int main(void)
- {
- Problem P;
- P.Solved();
- system("pause");
- return EXIT_FAILURE;
- }