STL中的priority_queue(优先队列)
引言
priority_queue 也是一種隊列,queue 有的性質和操作它也有(但是沒有back操作了),唯一不同就是它可以自動排序;
它的本質是通過堆實現的,在堆排序中會見到它,下面說一下它的用法;
基本內容
頭文件#include<queue>
定義priority_queue<Type, Container, Functional>
Type就是該隊列的數據類型, Container是保存數據的容器類型,且該容器必須由數組實現的,默認情況是vector;Functional可以簡單理解為數據的比較方法;
默認情況下只需要傳入數據類型就可以,容器類型默認為 vector, 數據的比較方法默認為大頂堆(即從大到小排列)
如priority_queue<int> q1; 等價于 priority_queue<int, vector<int>, less<int>> q2;
注:這里面數據比較方法用到了仿函數less<int>,不了解仿函數的可以看看這篇文章:內建函數對象(STL)
不使用仿函數還可以自己寫比較規則,只需要重載運算符 < 就可以了(比較方式默認用operator<),這里就不提了;
大頂堆
大頂堆可以理解為優先輸出大的數據,也是priority_queue的默認情況;
這里的Functional是less<int>了;
測試代碼:
壓入隊列的數為:1 4 3 5 2 8
輸出結果:
可以看出是從大到小排列的;
小頂堆
小頂堆可以理解為優先輸出小的數據;
所以這里面Functional就需要用greater<int>了;
測試代碼:
壓入隊列的數為:1 4 3 5 2 8
輸出結果:
可以看出是從小到大排列的;
總結
再次聲明以下使用priority_queue的幾點:
- priority_queue沒有back()操作
- priority_queue參數容器類型是由數組實現的
- 默認priority_queue是大頂堆(從大到小)
- less是從大到小,greater是從小到大,一定不要弄混!!!!
總結
以上是生活随笔為你收集整理的STL中的priority_queue(优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 450. 删除二叉搜索树中的节点
- 下一篇: 初识 java(简单易懂入门篇)