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


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值