您的位置:首页 > 其它

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

2011-11-10 22:00 369 查看
标题:利用stl::multimap查找共同好友
时限:1000ms
内存限制:10000K
总时限:3000ms
描述:利用multimap模版查找共同好友并输出
输入:要查找的所有记录个数所有记录要查找多少人的共同好友这些人的姓名
输出:共同好友的全部信息(包括stringname;intnum;intage;)按照num排序输出,如果没有,输出NO
输入样例:6张潮刘磊90241922王磊赵磊90242922张潮张平一90243621李平一白上由90242222王浩王洗星90242020王浩张平一902436212张潮王浩
输出样例:张平一90243621
提示:相同好友是指姓名学号年龄全部相同
#include<iostream>
usingnamespacestd;
#include<map>
#include<string>

classFriendMessages
{
public:
FriendMessages(stringname="",intnum=0,intage=0)
{
this->age=age;
this->name=name;
this->num=num;
}
voidPrint()
{
cout<<name<<''<<num<<''<<age<<endl;
}
booloperator==(FriendMessagescomp)
{
return((comp.age==age)&&(comp.name==name)&&(comp.num==num));
}
booloperator!=(FriendMessagescomp)
{
return!((comp.age==age)&&(comp.name==name)&&(comp.num==num));
}
intnum;///
private:
stringname;
intage;
};

classProblem
{
public:
Problem();
voidSolved();
private:
intx,y;
structtestFriendMessages
{
FriendMessagesFM;
intnum;
};
multimap<string,FriendMessages>messages;
multimap<int,testFriendMessages>comFriend;
};

Problem::Problem()
{
cin>>x;
intiTemp=x;
while(iTemp--)
{
stringname,friName;
intnum,age;
cin>>name>>friName>>num>>age;
FriendMessagesFMTemp(friName,num,age);
messages.insert(pair<string,FriendMessages>(name,FMTemp));
}
}

voidProblem::Solved()
{
cin>>y;
intiTemp=0;
while(iTemp<y)
{
stringname;
cin>>name;
pair<multimap<string,FriendMessages>::iterator,
multimap<string,FriendMessages>::iterator>p;
p=messages.equal_range(name);
if(!iTemp)
{
multimap<string,FriendMessages>::iteratorit=p.first;
for(;it!=p.second;it++)
{
testFriendMessagestFMTemp;
tFMTemp.FM=it->second;
tFMTemp.num=1;
comFriend.insert(pair<int,testFriendMessages>(tFMTemp.FM.num,tFMTemp));
}
}
else
{
multimap<string,FriendMessages>::iteratorit=p.first;
for(;it!=p.second;it++)
{
multimap<int,testFriendMessages>::iteratorq=comFriend.begin();
for(;q!=comFriend.end();q++)
{
if(q->second.FM==it->second)
{
q->second.num++;
}
}
}
}
iTemp++;
}
multimap<int,testFriendMessages>::iteratorq=comFriend.begin();
for(;q!=comFriend.end();q++)
{
if(q->second.num>=y)
{
q->second.FM.Print();
}
}
}

intmain(void)
{
ProblemP;
P.Solved();
system("pause");
returnEXIT_FAILURE;
}
FriendMessages中的数据成员(字段)nun是public,这道题的陷阱在于如何处理排序!
代码风格不理想,可能是太想享受用面向对象的思维方式去解决问题吧。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: