概述
优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列往往用堆来实现。
优先队列至少需要支持下述操作:
- 插入带优先级的元素(insert_with_priority)
- 取出具有最高优先级的元素(pull_highest_priority_element)
- 查看最高优先级的元素(peek):O(1) 时间复杂度
其它可选的操作:
- 检查优先级高的一批元素
- 清空优先队列
- 批插入一批元素
- 合并多个优先队列
- 调整一个元素的优先级
优先队列的定义和基本操作
priority_queue<node> q;
q.empty() 如果队列为空,则返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队首元素,但不返回其值
q.top() 返回具有最高优先级的元素值,但不删除该元素
q.push() 在基于优先级的适当位置插入新元素
可以看出,优先队列的操作和基本的队列的操作稍有区别。
优先级问题
默认优先级
通过<操作符可知在整数中元素大的优先级高。
自定义优先级
struct node
{
int value;
//按照value的值大的优先
friend bool operator<(node x, node y) {
return x.value < y.value;
}
node(int value) : value(value){}
};
struct node
{
int value;
//默认的是最大顶堆,所以value属于top
bool operator < (node x) const {
return x.value < value; //从小到大排序
}
node(int value) : value(value){}
};
个人理解:第一种是x相当于队列头,返回的是比队列头大的值。
第二种,value是队列头,返回的是比队列头小的值,所以是从小到大排序。
/*
* @Author: wfy
* @Date: 2020-03-10 10:30:44
* @Last Modified by: wfy
* @Last Modified time: 2020-03-10 10:30:44
*/
#include <bits/stdc++.h>
using namespace std;
struct node
{
int value;
//按照value的值大的优先
friend bool operator<(node x, node y) {
return x.value < y.value;
}
node(int value) : value(value){}
};
int main(int argc, char const *argv[])
{
priority_queue<node> p;
p.push(node(1));
p.push(node(0));
p.push(node(3));
node a = p.top();
printf("%d", a.value);
p.pop();
printf("%d", p.top().value);
return 0;
}
/*
* @Author: wfy
* @Date: 2020-03-10 10:30:44
* @Last Modified by: wfy
* @Last Modified time: 2020-03-10 10:30:44
*/
#include <bits/stdc++.h>
using namespace std;
struct node
{
int value;
//默认的是最大顶堆,所以value属于top
bool operator < (node x) const {
return x.value < value; //从小到大排序
}
node(int value) : value(value){}
};
int main(int argc, char const *argv[])
{
priority_queue<node> p;
p.push(node(1));
p.push(node(0));
p.push(node(3));
node a = p.top();
printf("%d", a.value);
p.pop();
printf("%d", p.top().value);
return 0;
}
最后
以上就是超帅铃铛为你收集整理的优先队列和结构体重载(详解)的全部内容,希望文章能够帮你解决优先队列和结构体重载(详解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复