函數 | 描述 by MoreWindows( http://blog.csdn.net/MoreWindows ) |
構造析構 |
|
priority_queue <Elem> c |
創建一個空的queue 。 注:priority_queue構造函數有7個版本,請查閱MSDN |
數據訪問與增減 |
|
c.top() | 返回隊列頭部數據 |
c.push(elem) | 在隊列尾部增加elem數據 |
c.pop() | 隊列頭部數據出隊 |
其它操作 |
|
c.empty() | 判斷隊列是否爲空 |
c.size() |
返回隊列中數據的個數 |
可以看出priority_queue的函數列表與棧stack的函數列表是相同的。
優先隊列是隊列的一種,不過它可以按照自定義的一種方式(數據的優先級)來對隊列中的數據進行動態的排序
每次的push和pop操作,隊列都會動態的調整,以達到我們預期的方式來存儲。
例如:我們常用的操作就是對數據排序,優先隊列默認的是數據大的優先級高
所以我們無論按照什麼順序push一堆數,最終在隊列裏總是top出最大的元素。
用法:
示例:將元素5,3,2,4,6依次push到優先隊列中,print其輸出。
1. 標準庫默認使用元素類型的<操作符來確定它們之間的優先級關係。
priority_queue<int> pq;
通過<操作符可知在整數中元素大的優先級高。
故示例1中輸出結果爲: 6 5 4 3 2
2. 數據越小,優先級越高
priority_queue<int, vector<int>, greater<int> >pq;
其中
第二個參數爲容器類型。
第二個參數爲比較函數。
故示例2中輸出結果爲:2 3 4 5 6
3. 自定義優先級,重載比較符號
重載默認的 < 符號
struct node { friend bool operator< (node n1, node n2) { return n1.priority < n2.priority; } int priority; int value; };
這時,需要爲每個元素自定義一個優先級。
注:重載>號會編譯出錯,因爲標準庫默認使用元素類型的<操作符來確定它們之間的優先級關係。
而且自定義類型的<操作符與>操作符並無直接聯繫