STL容器与算法 (七)Priority Queues(优先队列)知识点

本文详细介绍了C++中的优先队列priority_queue,包括其作为堆技术实现的特点、如何创建小根堆、常用成员函数如push、pop、size、top和empty的用法。优先队列常用于快速获取最大元素,其插入和删除操作的时间复杂度为O(log(n))。

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

C++ Priority Queues

priority_queue 是“优先队列”。它和普通队列的区别在于,优先队列的队头元素总是最大的——即执行 pop 操作时,删除的总是最大的元素;执行 top 操作时,返回的是最大元素的引用。

priority_queue 是采用“堆技术”技术实现的,其内部并非完全有序,但却能确保最大元素总在队头。因此,priority_queue 特别适合用于不停的在一堆元素中取走最大的元素,priority_queue插入和删除元素的复杂度都是O(log(n))。它的队头元素只能被查看或者修改,不能被删除。


头文件

queue 和 priority_queue 都是容器适配器,要使用它们,必须包含头文件 。

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

小根堆

优先队列默认是大根堆,若要实现升序,则需改变其中的优先级

priority_queue<int,vector<int>,greater<int> >q;//定义优先队列 升序

这样的话,我们可以得到一个小根堆;
意思大概是<类型,<存储方式>,<比较函数> >;
但是这个小根堆只能支持int;

struct Range{
    int l, r;
    bool operator < (const Range &W) const 
    {
        return l > rhs.l;
    }
}Range[N];

priority_queue<cs>Q;

第一个const保证

这个是一个结构体的小根堆;
开心;
我们可以再结构体里面放各种东西;


成员函数

  • push()

语法:

void push( const TYPE &val );

push()函数添加一个元素到优先队列中,值为val。

  • pop()

语法:

void pop();

pop()函数删除优先队列中的第一个元素。

  • size()

语法:

size_type size();

size()函数返回优先队列中存储的元素个数

  • top()

语法:

TYPE &top();

top()返回一个引用,指向优先队列中有最高优先级的元素。注意只有pop()函数删除一个元素。

  • empty()

语法:

bool empty();

empty()函数返回真(true)如果优先队列为空,否则返回假(false)。

#include<iostream>
#include<queue>
using namespace std;
 
int main()
{
	priority_queue<double> pq;
	pq.push(1.1);
	pq.push(2.2);
	pq.push(3.3);
	pq.push(4.4);
	pq.push(4.4);
	while(!pq.empty()){
		cout << pq.top() << " ";   //输出队头 
		pq.pop();                  //删除队头 
	}
	cout << endl;
	priority_queue<double,vector<double>,greater<double> > pq1;
	pq1.push(3.3);
	pq1.push(1.1);
	pq1.push(3.3);
	pq1.push(5.5);
	pq1.push(4.4);
	while(!pq1.empty()){
		cout << pq1.top() << " ";   //输出队头 
		pq1.pop();                  //删除队头 
	}
	cout << endl; 
	
	system("pause");
	return 0;
}

输出结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值