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