priority queue的實現最小堆的用法

2021-08-08 05:29:11 字數 1827 閱讀 5120

**

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 元素...