优先队列(STL)

本文详细介绍了C++中的优先队列priority_queue,包括其自动排序特性、基本操作、默认排序规则以及如何自定义排序规则。通过示例展示了如何使用结构体并重载小于运算符,以及如何利用less和greater指定升序或降序。文章还讨论了在不使用重载情况下,如何通过自定义比较函数实现优先队列的排序,并提供了实例代码。
摘要由CSDN通过智能技术生成

优先队列的功能强大在哪里呢?
四个字:自动排序。

一个优先队列声明的基本格式是:
priority_queue<结构类型> 队列名;
比如:

priority_queue <int> i;
priority_queue <double> d;

不过最为常用的是这几种:

priority_queue <node> q;
//node是一个结构体
//结构体里重载了‘<’小于符号
priority_queue <int,vector<int>,greater<int> > q;
//注意后面两个“>”不要写在一起,“>>”是右移运算符
priority_queue <int,vector<int>,less<int> >q;

优先队列的基本操作
与队列的基本操作如出一辙。
以一个名为q的优先队列为例。

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素

优先队列的特性:自动排序。

默认的优先队列(非结构体结构)

priority_queue <int> q;

代码详解:

#include<bits/stdc++.h>
using namespace std;
priority_queue <int> q;
int main()
{
	q.push(10),q.push(8),q.push(12),q.push(14),q.push(6);
	while(!q.empty())
		printf("%d ",q.top()),q.pop();
}

程序大意就是在这个优先队列里依次插入10、8、12、14、6,再输出。结果是14 12 10 8 6。也就是说,它是按从大到小排序的!

默认的优先队列(结构体,重载小于)
先看看这个结构体是什么。

struct node
{
	int x,y;
	bool operator < (const node & a) const
	{
		return x<a.x;
	}
};

这个node结构体有两个成员,x和y,它的小于规则是x小则小。
再来看看验证程序:

#include<bits/sdtc++.h>
using namespace std;
struct node
{
	int x,y;
	bool operator < (const node & a) const
	{
		return x<a.x;
	}
}k;
priority_queue <node> q;
int main()
{
	k.x=10,k.y=100; q.pus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值