优先队列
之前有见到过,优先队列就是堆
但是不是很明白priority_queue
这个STL容器究竟跟queue有什么区别?
STL中的 priority_queue 通常是一个最大堆,这意味着在C++中,priority_queue 默认按照最大值的顺序返回元素。但你可以通过自定义比较函数来创建最小堆。
在Java中,PriorityQueue 也是一个优先队列,通常是一个小根堆,以便按升序顺序返回元素。你可以使用 Collections.reverseOrder() 来创建一个大根堆,以便按降序顺序返回元素。
#include<iostream> // 头文件与队列相同,不用引入单独的头文件,同时也不需要引入vector头文件 #include<queue> using namespace std; // 优先队列数据结构 int main() { // 简写形式,默认是大顶堆 priority_queue<int> pque; // 全写形式,大顶堆 priority_queue<int,vector<int>,less<int>> maxque; // 全写形式,小顶堆 priority_queue<int, vector<int>, greater<int>> minque; pque.emplace(4); pque.emplace(9); pque.emplace(3); pque.emplace(5); pque.emplace(7); int n = pque.size(); // 可以看到这里每一步pop,优先队列都自动实现了堆的调整 // 使得每次队列中的序列元素都满足一个大顶堆 for (int i = 0; i < n; i++) { cout << pque.top(); pque.pop(); } // 输出:97543 // 因为每次都保证了队首元素是最大值(大顶堆堆顶),所以输出是有序的 // 感觉最大的意义就是不用自己写堆了,但是可能面试官不会让你这么干 // 笔试的意义大一些 return 0; }
但是尽管优先队列免去了自己写、操作细节,但调整堆的时间&空间复杂度仍然是有的
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16924442.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步