**
priority_queue呼叫 stl裡面的make_heap(), pop_heap(), push_heap()
演算法實現,也算是堆的另外一種形式。先寫乙個用 stl 裡面堆演算法實現的與真正的stl裡面的 priority_queue用法相似的priority_queue, 以加深對 priority_queue 的理解。
#include
#include
#include
using
namespace
std;
class priority_queue
void pop()
int top()
int size()
bool empty()
};int main()
return
0;}
stl裡面的 priority_queue 寫法與此相似,只是增加了模板及相關的迭代器什麼的。
priority_queue 對於基本型別的使用方法相對簡單。他的模板宣告帶有三個引數:priority_queue
其中type 為資料型別, container 為儲存資料的容器,functional 為元素比較方式。container 必須是用陣列實現的容器,比如 vector, deque 但不能用 list. stl裡面預設用的是 vector. 比較方式預設用 operator< , 所以如果你把後面倆個引數預設的話,優先佇列就是大頂堆,隊頭元素最大。
#include
#include
using
namespace
std;
int main()
getchar();
return
0;}
如果要用到小頂堆,則一般要把模板的三個引數都帶進去。
stl裡面定義了乙個仿函式 greater<>,對於基本型別可以用這個仿函式宣告小頂堆。
#include
#include //std:greater<>
#include
using
namespace
std;
int main()
getchar();
return
0;}
對於自定義型別,則必須自己過載 operator< 或者自己寫仿函式。
#include
#include
using
namespace
std;
struct node
};bool
operator
<( node a, node b )
int main()
getchar();
return
0;}
自定義型別過載 operator< 後,宣告物件時就可以只帶乙個模板引數。但此時不能像基本型別這樣priority_queue, greater>;
原因是greater
沒有定義,如果想用這種方法定義則可以按如下方式:
#include
#include
using
namespace
std;
struct node
};struct cmp
};int main()
getchar();
return
0;}
//以上**實現的是乙個小頂堆
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 容器內元素的訪問 ...
PriorityQueue實現原理
priorityqueue priorityqueue是個基於優先順序堆的極大優先順序佇列 此佇列按照在構造時所指定的順序對元素排序,既可以根據元素的自然順序來指定排序 參閱 comparable 也可以根據 comparator 來指定 這取決於使用哪種構造方法。優先順序佇列不允許 null 元素...