stl::priority_queue的用法及其成員函數

priority_queue函數列表
函數 描述      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;
}; 
複製代碼

這時,需要爲每個元素自定義一個優先級。

注:重載>號會編譯出錯,因爲標準庫默認使用元素類型的<操作符來確定它們之間的優先級關係。
而且自定義類型的<操作符與>操作符並無直接聯繫


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章