priority_queue呼叫 stl裡面的 make_heap(), pop_heap(), push_heap() 演算法實現,也算是堆的另外一種形式。先寫乙個用 stl 裡面堆演算法實現的與真正的stl裡面的 priority_queue用法相似的priority_queue, 以加深對 priority_queue 的理解
#
include
<
iostream
>
#include
#include
<
vector
>
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
<
iostream
>
#include
<
queue
>
using
namespace
std;
int main(
)getchar()
;return 0;
}
如果要用到小頂堆,則一般要把模板的三個引數都帶進去。
stl裡面定義了乙個仿函式 greater<>,對於基本型別可以用這個仿函式宣告小頂堆
#
include
<
iostream
>
#include
<
queue
>
using
namespace
std;
int main(
)getchar()
;return 0;
}
對於自定義型別,則必須自己過載 operator< 或者自己寫仿函式
#
include
<
iostream
>
#include
<
queue
>
using
namespace
std;
struct node};
bool
operator
<
( node a, node b )
int main(
)getchar()
;return 0;
}
自定義型別過載 operator< 後,宣告物件時就可以只帶乙個模板引數。
但此時不能像基本型別這樣宣告
priority_queue;
原因是 greater 沒有定義,如果想用這種方法定義
則可以按如下方式:
#
include
<
iostream
>
#include
<
queue
>
using
namespace
std;
struct node};
struct cmp};
int main(
)getchar()
;return 0;
}
//以上**實現的是乙個小頂堆
**:
priority queue 優先佇列)
佇列 先輸入先輸出 優先佇列使用方法 標頭檔案 include using namespace std 宣告方法 1.普通方法 priority queueq 下劃線不可漏,預設從大到小輸出隊 2.結構體宣告方式 struct node int x,y frinend bool operator n...
優先佇列 priority queue
優先佇列 是一種抽象資料型別,行為有些像佇列,但是他不是先進先出型佇列 先出優先佇列的元素是佇列中優先順序最高的元素。就像 急診病人插隊 優先佇列的標頭檔案也是 用 priority queuepq 來宣告。這個pq是乙個越小的整數優先順序越低的優先佇列。出隊元素不是先進隊的元素,出隊的方法由que...
優先佇列 PriorityQueue
import queue q queue.priorityqueue q.put 1 新增元素 q.get 刪除元素 python的優先佇列基於最小堆實現。heap 堆 是乙個除了底層節點外的完全填滿的二叉樹,底層可以不完全,左到右填充節點。而最小堆意味著,任一非終端節點的資料值均不大於其左子節點和...