stl::multimap(标准库multimap使用)

作者在 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;
}
 
c++ | 阅读 1830 次
文章评论,共0条
游客请输入验证码
浏览66686次