定义:
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。
头文件:
#include
运算符重载:
friend bool operator<(node n1,node n2)
return n1.elem>n2.elem;
这是根据node结构体中的elem升序构建的一个操作符, 如果想要降序就把>换成<
关于优先队列的定义:
priority_queue
先上几个介绍优先队列的博客:
优先级队列几个应用详解
优先队列详解
优先队列priority_queue 用法详解
http://blog.csdn.net/yuanjilai/article/details/8043157
关于运算符的重载:
struct point{
int x;
int y;
int times;
friend bool operator < (point a, point b)
{
return a.times > b.times; //重载小于号使得小的先出队列
}
};
(a的权值<b的权值)
在此处定义一个优先队列priority_queue
如果要按照以times进行从小到大排列,操作如上。
进行重载<操作符。
意思是如果a.times > b.times成立,那么结构体point a < point b成立。由于优先队列是按照从大到小排列,所以结构体b会排列到a之前,然而b.times是最小的,所以实现了按照times的从小到大排序,其实用一句话说就是要想b更大那么b.times.
***在结构体中比较时需要进行运算符的重载(重载<),在不需要结构体时:
priority_queue<int,vector
priority_queue<int,vector
优先队列(priority_queue)的基本操作:
empty(); 队列为空返回1
pop(); 出队
push(); 入队
top(); 返回队列中优先级最高的元素
size(); 返回队列中元素的个数
参考链接