#include
using namespace std; (記得包含標頭檔案噢)
1. priority_queue在stl內部定義的原型是:
template< class t ,
class sequence=vector,
classcompare=less> (主要,要乙個空格,否則編譯器會當做右移操作符,報錯)
classpriority_queue;
最簡單的用法:
priority_queueq; // 注意上面第二個引數,和第三個引數的預設值。
//對於內建的物件,可以這麼簡單的定義;特別注意第三個引數, 預設的小於號(<), 即降序排序,預設的是大根堆。權值最大的會被彈出來。
最常見的用法:
priority_queueq; // 恩,自己定義的型別。
----------上面兩種型別,當自己需要的堆是小根堆的時候,即元素按公升序(從小到達的彈出),那麼必須改寫比較函式.
即對於stl中優先佇列的使用,最重要的就是這個比較函式的書寫(或對'<','>'的過載)了,常見的方法有下面兩種:
1. 方法一,過載'<' ('>')運算子:
//overload the < operator.bool operator< (conststudent& structstudent1, const student &structstudent2) //這個有點搞事的嫌疑,含義都反了
//overload the > operator.bool operator> (conststudent& structstudent1, const student &structstudent2)
具體使用的時候://declare a priority_queue and specify the order asagepriority_queue,less::value_type> >pqstudent1;
----因為預設的less, 所以過載'<'後,第二個引數,第三個引數可以省略//declare a priority_queue and specify the order as>//the priorities will be assigned in the descending order ofagepriority_queue,greater::value_type> >pqstudent2;
------如果過載的是'>'運算子,必須將第三個引數寫出來,greater
2. 方法二,構造『比較函式』,然後指定priority_queue的第三個引數
struct cmp
//當想要大根堆,降序時,讓它返回false就好,即用'<' (預設值)
}多關鍵字比較、'排序':
struct cmp
};priority_queue, cmp> p;
-----------其實這兩種方法,很常見。使用stl的algorithm裡的sort等演算法時,都需要指定!
2. 對於優先佇列使用時,特別是多個case的時候,要注意初始的清空!
while ( !q.empty() ) q.pop(); //效率不高?為什麼沒有提供clear的功能噢。
q.push( cur ); q.top(); q.pop(); q.size();
C 優先佇列priority queue及過載
優先佇列中的元素不同於一般先進先出的佇列,被賦予了優先順序,優先順序佇列具有最高端先出的行為特徵,通常採用堆這種資料結構來實現。基本操作如下 priority queuepq pq.empty 隊列為空返回true,否則返回false pq.size 返回佇列中元素的個數 pq.push 在基於優先...
C STL的priority queue用法總結
翻了很多部落格的總結 1 標頭檔案 include 2 定義 cpp view plain copy priority queue int p 3 優先輸出大資料 priority queue type為資料型別,container為儲存資料的容器,functional為元素比較方式。如果不寫後兩個...
priority queue的常見用法
其底層是用堆來進行實現的 在優先佇列中,隊首元素一定是當前佇列中優先順序最高的那乙個 當然,可以在任何時候往優先佇列裡面加入push元素 而優先佇列底層的資料結構堆 heap 會隨時調整結構 使得每次的隊首元素都是優先順序最大的 1 定義 priority queuename 2 容器內元素的訪問 ...