Hpearcl的纳西妲花园
首页项目归档笔记照片墙音乐灵境说说杂谈友链关于
笔记封面
返回列表
队列2026-08-29

优先级队列

队列堆排序竞赛

优先级队列

就是封装好的堆排序

:one:默认大根堆,即从大到小输出

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

int main()
{
	vector<int>a{ 5,4,3,1,2 };
	priority_queue<int>q(a.begin(), a.end());
	//priority_queue<int, vector<int>, less<int>>q(a.begin(), a.end());
	while (!q.empty())
	{
		cout << q.top() << " ";//访问堆顶元素
		q.pop();//弹出堆顶元素
	}
	return 0;
}

:two:如果想要小根堆,即从小到大输出

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

int main()
{
	vector<int>a{ 5,4,3,1,2 };
	priority_queue<int,vector<int>,greater<int>>q(a.begin(), a.end());
	while (!q.empty())
	{
		cout << q.top() << " ";//访问堆顶元素
		q.pop();//弹出堆顶元素
	}
	return 0;
}

:three:比较自定义类型

得重写模板类,尽量别用,没吃透

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node
{
	int x, y;
};

template <class T>
struct cmp {
	bool operator()(const T& _Left, const T& _Right) const {
		return _Left.x > _Right.x;
	}
};

int main()
{
	vector<node>a{ {5,6},{3,4},{1,2} };
	priority_queue<node,vector<node>,cmp<node>>q(a.begin(), a.end());
	while (!q.empty())
	{
		cout << q.top().x << " " << q.top().y << endl;
		q.pop();
	}
	return 0;
}

Table of Contents

文章信息
发布时间
2026-08-29
分类
队列