标题: 利用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,这道题的陷阱在于如何处理排序!
代码风格不理想,可能是太想享受用面向对象的思维方式去解决问题吧。