利用stl::multimap查找共同好友

来源:互联网 发布:淘宝网注册步骤 编辑:程序博客网 时间:2024/06/06 05:36
标题:利用stl::multimap查找共同好友时 限:1000 ms内存限制:10000 K总时限:3000 ms描述:利用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>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;}
FriendMessages中的数据成员(字段)nun是public,这道题的陷阱在于如何处理排序!
代码风格不理想,可能是太想享受用面向对象的思维方式去解决问题吧。
 

原创粉丝点击