PAT甲级——1129 Recommendation System(重载set的operator函数)

1129 Recommendation System(重载set的operator<()函数)

 发布完上一篇文章之后再网上发现了更简单的做法,重载set里的operator<()函数以实现自定义顺序的集合,每次输出集合里面的前K个数值就行;题目就不重复搬了,直接上代码:

#include <iostream>
#include<unordered_map>
#include<set>
using namespace std;
struct node {
	int value, time = 0;
	bool operator <(const node &a) const {
		return time != a.time ? time > a.time : value < a.value;
	}
};

unordered_map<int, node> mp;
set<node> rec;
int main()
{
	int N, K, pre;
	scanf("%d%d%d", &N, &K, &pre);
	for (int i = 2; i <= N; i++) {
		int vertex,j=1;
		scanf("%d", &vertex);
		mp[pre].value = pre;
		mp[pre].time++;
		auto tmp = rec.find({ pre,mp[pre].time - 1 });
		if (tmp != rec.end()) rec.erase(tmp);
		rec.insert({ pre,mp[pre].time });
		printf("%d:", vertex);
		for (auto it = rec.begin(); it != rec.end() && j <= K; it++, j++)
			printf(" %d", it->value);
		printf("\n");
		pre = vertex;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44385565/article/details/89048571