作者在 2011-12-13 22:57:44 发布以下内容
标题: | 3、利用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>
#include <map>
#include <list>
using namespace std;
typedef struct
{
string name;
double num;
int age;
} value,*vpt;
typedef struct
{
value p;
int x;
} samevalue,*spt;
ostream &operator <<(ostream & cout,value p)
{
cout<<p.name<<" "<<p.num<<" "<<p.age<<endl;
return cout;
}
bool compare(samevalue a,samevalue b)
{
if(a.p.num<=b.p.num) return true;
else return false;
}
int main()
{
int count;
cin>>count;
multimap <string ,value>record;
multimap <string ,value>::iterator it;
pair<multimap<string ,value>::iterator,multimap<string ,value>::iterator> ret;
for(int i=0; i<count ; i++)
{
string name;
vpt pt=new value;
cin>>name;
cin>>pt->name>>pt->num>>pt->age;
record.insert(pair<string ,value>(name,*pt));
}
int fnum;
cin>>fnum;
list<samevalue> frien_r;
list<samevalue>::iterator itpt;
for(int i=0; i<fnum; i++ )
{
string fname;
cin>>fname;
ret = record.equal_range(fname);
for (it=ret.first; it!=ret.second; ++it)
{
if(i==0)
{
spt ept=new samevalue;
ept->x=1;
ept->p.name=(*it).second.name,ept->p.age=(*it).second.age,ept->p.num=(*it).second.num;
//cout<<ept->p.name<<" "<<ept->p.num<<" "<<ept->p.age<<endl;
frien_r.push_back( *ept);
}
else
{
itpt=frien_r.begin();
do
{
if((*it).second.name==itpt->p.name&&(*it).second.num==itpt->p.num&&(*it).second.age==itpt->p.age)
{
itpt->x++;
//break;
}
itpt++;
}
while(itpt!=frien_r.end());
}
}
}
record.clear();
frien_r.sort(compare);
itpt=frien_r.begin();
do
{
if(itpt->x>=fnum)
//if(1)
{
cout<<itpt->p;
//cout<<itpt->x<<endl;
}
itpt++;
}
while(itpt!=frien_r.end());
frien_r.clear();
//cout << "Hello world!" << endl;
return 0;
}
#include <map>
#include <list>
using namespace std;
typedef struct
{
string name;
double num;
int age;
} value,*vpt;
typedef struct
{
value p;
int x;
} samevalue,*spt;
ostream &operator <<(ostream & cout,value p)
{
cout<<p.name<<" "<<p.num<<" "<<p.age<<endl;
return cout;
}
bool compare(samevalue a,samevalue b)
{
if(a.p.num<=b.p.num) return true;
else return false;
}
int main()
{
int count;
cin>>count;
multimap <string ,value>record;
multimap <string ,value>::iterator it;
pair<multimap<string ,value>::iterator,multimap<string ,value>::iterator> ret;
for(int i=0; i<count ; i++)
{
string name;
vpt pt=new value;
cin>>name;
cin>>pt->name>>pt->num>>pt->age;
record.insert(pair<string ,value>(name,*pt));
}
int fnum;
cin>>fnum;
list<samevalue> frien_r;
list<samevalue>::iterator itpt;
for(int i=0; i<fnum; i++ )
{
string fname;
cin>>fname;
ret = record.equal_range(fname);
for (it=ret.first; it!=ret.second; ++it)
{
if(i==0)
{
spt ept=new samevalue;
ept->x=1;
ept->p.name=(*it).second.name,ept->p.age=(*it).second.age,ept->p.num=(*it).second.num;
//cout<<ept->p.name<<" "<<ept->p.num<<" "<<ept->p.age<<endl;
frien_r.push_back( *ept);
}
else
{
itpt=frien_r.begin();
do
{
if((*it).second.name==itpt->p.name&&(*it).second.num==itpt->p.num&&(*it).second.age==itpt->p.age)
{
itpt->x++;
//break;
}
itpt++;
}
while(itpt!=frien_r.end());
}
}
}
record.clear();
frien_r.sort(compare);
itpt=frien_r.begin();
do
{
if(itpt->x>=fnum)
//if(1)
{
cout<<itpt->p;
//cout<<itpt->x<<endl;
}
itpt++;
}
while(itpt!=frien_r.end());
frien_r.clear();
//cout << "Hello world!" << endl;
return 0;
}