优先队列学习
Posted csyxdh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优先队列学习相关的知识,希望对你有一定的参考价值。
参考的优质博客:
? https://blog.csdn.net/c20182030/article/details/70757660
优先队列的定义是 :
1.存在的库函数:
? #include<queue>
2.一般的定义
? priosity_queue<type, cotainers<> , cmp> q; /第一个参数为参数类型, 第二参数为容器,第三个参数为比较函数. 一般可以用 greater<类型> 表示从小到大排序.
对于 优先队列与 普通排序不同:
重载优先队列时 优先队列默认排序是 大顶堆 从大到小排序
因此要使得 优先队列 默认从小到大排序 需要 定义为:
struct cmp{
? bool operator(const Node &a,const Node &b) const{
? return a.xx > b.xx; //按照小顶堆排序
? }
}
eg:
3. 常见 重载cmp代码格式
如果直接定义 为 priosity_queue<Node> q 这样默认的格式为 :这样默认安装大顶堆的排序方式
struct Node{
int d, u;
// bool operator <( const Node &x )const //这是重载小于符号
// {
// return d > x.d;
// }
};
struct cmp{ //和普通的重载排序算法不同, 因为优先队列默认是
bool operator () (const Node &a,const Node &b) const{
return a.d > b.d;
}
};
4.优先队列用到的场景:
? 1.堆优化算法: dijkstra算法, prime算法.
以上是关于优先队列学习的主要内容,如果未能解决你的问题,请参考以下文章