C++ 标准模板库--priority_queue使用方法

本文深入探讨了C++标准库中的priority_queue容器,讲解其本质、应用场合及使用方法,包括基本操作、引用方式和优先级设置,特别介绍了如何为结构体设置优先级。

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

一、关于priority_queue

1.本质:内部根据用户定义的权重自动排序的队列。

2.常用:顺序问题、哈夫曼问题等,此类问题其实都可用其他的方法来实现,但有可能其他的方法规模太大,在OJ时会超时。

二、使用priority_queue

1.引用

与queue的引用一致。

2.基本操作

push(x)将 x 入队,top()访问优先级最高的一个元素,pop()优先级最高的一个出队,empty()检测是否为空,size()返回队列内的元素个数。

3.优先级的设置(重要)

3.1 基本数据类型的优先级设置

对于int,char,double等基本数据类型,优先队列的默认是值(字典序)最大的在最前面,区别于 set 的最小值在前面,如果想把之最小的元素放在队首,则需要用以下定义:

priority_queue<typrname, vector<typename>, greater<typename> > q;  //typename为int等基本数据类型。

3.2 对结构体的优先级设置

对于结构体的优先级设置需要重载小于号,见下例。

#include<stdio.h>
#include<queue>
#include<iostream>
#include<string>

using namespace std;

struct fruit{
	int price;
	string name;
	// 价格不相等时价格由高到低,价格相等时名字由低到高。 
	// 与 sort 中 cmp 函数相反。
	// 只允许对 < 进行重载。 
	friend bool operator < (fruit f1,fruit f2){
		if(f1.price != f2.price){
			return f1.price < f2.price;
		}else{
			return f1.name > f2.name;
		}
	}
}; 

int main(){
	priority_queue<fruit> q;
	fruit f[3];
	f[0].price = 5;
	f[0].name = "apple";
	q.push(f[0]);
	f[1].price = 5;
	f[1].name = "banana";
	q.push(f[1]);
	f[2].price = 3;
	f[2].name = "orange";
	q.push(f[2]);
	cout << q.top().name << " " << q.top().price << "\n";
	q.pop();
	cout << q.top().name << " " << q.top().price << "\n";
	q.pop();
	cout << q.top().name << " " << q.top().price << "\n";
	return 0;
}


/*
output: 
apple 5
banana 5
orange 3 
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值