priority_queue的用法

点击查看代码
#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
#pragma warning(disable:4996)
using namespace std;

//建立一个结构体fruit存储水果名称和价格,结构体的优先级设置有两种
//(1)在结构体内部设置优先级,在main()中定义:priority_queue<fruit> q;
struct fruit {
	string name;
	int price;
	//编写"<"重载友元函数,设置结构体的优先级(不能重载">")
	friend bool operator< (fruit f1, fruit f2) {
		//return f1.price < f2.price; //价格高的优先级高
		return f1.price > f2.price; //价格低的优先级高
	}
};

//(2) 在结构体外部设置优先级,在main()中定义:priority_queue<fruit1, vector<fruit1>, cmp> q1;
struct fruit1 {
	string name;
	int price;
};
struct cmp { //建立结构体cmp存储fruit1的优先级设置函数
	//此时要编写重载函数,而不是"<"重载友元函数
	bool operator() (fruit1 f1, fruit1 f2) {
		//return f1.price < f2.price;	//价格高的优先级高
		return f1.price > f2.price; //价格低的优先级高
	}
};


int main() {
	/*
	priority_queue<int> q;
	q.push(3); //q按照默认优先级排序(数字大的优先级高)
	q.push(4);
	q.push(1); //q:4 3 1
	printf("%d\n", q.top()); //q的队首元素是4
	q.pop(); //令首元素4出队,即删除首元素4
	printf("%d\n", q.top()); //q的队首元素是3
	while (q.empty() == false) { //删除q中所有元素,empty()为true表示队列空
		q.pop();
	}
	printf("%d\n", q.size()); //q中所有元素删除后,大小变为0
	*/

	/*
	//优先级设置
	//1、基础数据类型优先级设置
	//第1个参数是存储元素类型,第2个参数是底层数据结构堆(heap)的容器类型
	//第3个参数是优先级设置,greater<int>是元素值小的优先级高,less<int>是元素值大的优先级高(默认是less)	
	priority_queue<int, vector<int>, greater<int> > q;
	q.push(3); //q按照元素值小的优先级高,q:1 3 4
	q.push(4);
	q.push(1);
	printf("%d\n", q.top()); //q的队首元素是1
	*/

	//2、结构体类型的优先级设置	
	priority_queue<fruit> q; //在结构体fruit内部设置优先级	
	fruit f1, f2, f3; //3个fruit变量
	f1.name = "桃子"; f1.price = 3;
	f2.name = "梨子"; f2.price = 4;
	f3.name = "苹果"; f3.price = 1;
	//q按价格低的优先级高排序,所以q:苹果(1),桃子(3),梨子(4)
	q.push(f1);	q.push(f2); q.push(f3);	
	cout << q.top().name << " " << q.top().price << endl; //输出q的队首元素:苹果 1
	
	priority_queue<fruit1, vector<fruit1>, cmp> q1; //在结构体fruit1外部设置优先级
	fruit1 f4, f5, f6; //3个fruit1变量
	f4.name = "桃子"; f4.price = 3;
	f5.name = "梨子"; f5.price = 4;
	f6.name = "苹果"; f6.price = 1;
	//q1按价格低的优先级高排序,所以q1:苹果(1),桃子(3),梨子(4)
	q1.push(f4); q1.push(f5); q1.push(f6); 
	cout << q1.top().name << " " << q1.top().price << endl; //输出q1的队首元素:苹果 1

	return 0;
}
posted @ 2022-09-30 23:03  zhaoo_o  阅读(7)  评论(0编辑  收藏  举报