c++——优先队列(priority_queue)
優(yōu)先隊列詳解/C++
優(yōu)先隊列
1.概念:什么是優(yōu)先隊列呢?在優(yōu)先隊列中,元素被賦予優(yōu)先級,當(dāng)訪問元素時,具有最高級優(yōu)先級的元素先被訪問 .即優(yōu)先隊列具有最高級先出的行為特征。它可以說是隊列和排序的完美結(jié)合體,不僅可以存儲數(shù)據(jù),還可以將這些數(shù)據(jù)按照我們設(shè)定的規(guī)則進行排序。
2.定義:優(yōu)先隊列在頭文件#include 中;其聲明格式為:priority_queue ans;//聲明一個名為ans的整形的優(yōu)先隊列
3.支持的操作:
q.empty() //如果隊列為空,則返回true,否則返回false q.size() //返回隊列中元素的個數(shù) q.pop() //刪除隊首元素,但不返回其值 q.top() //返回具有最高優(yōu)先級的元素值,但不刪除該元素 q.push(item) //在基于優(yōu)先級的適當(dāng)位置插入新元素4實例:
優(yōu)先隊列的時間復(fù)雜度為O(logn),n為隊列中元素的個數(shù),其存取都需要時間。
在默認(rèn)的優(yōu)先隊列中,優(yōu)先級最高的先出隊。默認(rèn)的int類型的優(yōu)先隊列中先出隊的為隊列中較大的數(shù)。
然而更多的情況下,我們是希望可以自定義其優(yōu)先級的,下面介紹定義優(yōu)先級的操作
priority_queue 對于基本類型的使用方法相對簡單。他的模板聲明帶有三個參數(shù):
priority_queue<Type, Container, Functional> 其中Type 為數(shù)據(jù)類型, Container 為保存數(shù)據(jù)的容器,Functional 為元素比較方式。
Container 必須是用數(shù)組實現(xiàn)的容器,比如 vector, deque 但不能用 list.STL里面默認(rèn)用的是 vector.
1.比較方式默認(rèn)用 operator< , 所以如果你把后面?zhèn)z個參數(shù)缺省的話,優(yōu)先隊列就是大頂堆,隊頭元素最大。(也就是默認(rèn)非升序)
priority_queue q;
2.如果要用到小頂堆,則一般要把模板的三個參數(shù)都帶進去。
STL里面定義了一個仿函數(shù) greater<>,對于基本類型可以用這個仿函數(shù)聲明小頂堆(非降序)
priority_queue<int, vector, greater > q;
3.對于自定義類型,則必須自己重載 operator<
priority_queue q;
4.自定義cmp
priority_queue<Node, vector, cmp> q;
總結(jié)
以上是生活随笔為你收集整理的c++——优先队列(priority_queue)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不吃不喝减肥对身体的危害大吗
- 下一篇: c++ new一个结构体_C语言结构体,