C++ priority_queue (优先级队列)

文章介绍了C++标准库中的优先级队列priority_queue,它基于堆数据结构,默认为大堆。用户可以通过自定义仿函数实现小堆。主要操作包括创建、初始化、入队、出队、获取队头元素、判空、获取元素个数和交换队列。文章还提供了一个简单的模板类实现,展示了如何使用仿函数调整大堆和小堆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

priority_queue


优先级队列,底层数据结构是由一个堆,默认情况下是一个大堆,如果想让其变成一个小堆,可以在创建的时候传一个仿函数,通俗的来说,就是优先级队列会自动排序,默认排序是降序(大堆)

基本使用

创建和初始化:
priority_queue<数据类型,容器,仿函数>
1,普通创建和初始化
在这里插入图片描述
2,仿函数初始化
greater:小堆
less:大堆
在这里插入图片描述

3,入队
push
在这里插入图片描述
将数据插入队列尾部

4,出队
pop
在这里插入图片描述
将队头元素删除

5,获取队头元素
top
在这里插入图片描述

6,判空
empty
在这里插入图片描述

7,获取元素个数
size
在这里插入图片描述

8,交换队列
swap
在这里插入图片描述

底层原理

普通的queue底层使用的是数组,而优先级队列使用的堆,因为堆在删除和插入时会向上和向下调整,能保持升序和降序,而且成本较低
我们来模拟实现一下:

//使用两个仿函数来搞定大堆小堆的问题
template<class T>
	struct less
	{
   
   
		bool operator()(T x, T y)
		{
   
   
			return x > y;
		}
	};

	template<class T>
	struct greate
	{
   
   
		bool operator()(T x, T y)
		{
   
   
			return x < y;
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值