優先佇列priority queue

2021-10-25 16:14:30 字數 2390 閱讀 6504

template ,

typename compare=std::less>

class priority_queue

可以看到,priority_queue 容器介面卡模板類最多可以傳入 3 個引數,它們各自的含義如下:

typename t:指定儲存元素的具體型別;

typename container:指定 priority_queue 底層使用的基礎容器,預設使用 vector 容器。

作為 priority_queue 容器介面卡的底層容器,其必須包含 empty()、size()、front()、push_back()、pop_back() 這幾個成員函式,stl 序列式容器中只有 vector 和 deque 容器符合條件。

typename compare:指定容器中評定元素優先順序所遵循的排序規則,預設使用std::less按照元素值從大到小進行排序,還可以使用std::greater按照元素值從小到大排序,但更多情況下是使用自定義的排序規則。其中,std::less 和 std::greater 都是以函式物件的方式定義在 標頭檔案中。關於如何自定義排序規則,後續章節會做詳細介紹。

priority_queue 提供的成員函式
成員函式

功能empty()

如果 priority_queue 為空的話,返回 true;反之,返回 false。

size()

返回 priority_queue 中儲存元素的個數。

top()

返回 priority_queue 中第乙個元素的引用形式。

push(const t& obj)

根據既定的排序規則,將元素 obj 的副本儲存到 priority_queue 中適當的位置。

push(t&& obj)

根據既定的排序規則,將元素 obj 移動儲存到 priority_queue 中適當的位置。

emplace(args&&… args)

args&&… args 表示構造乙個儲存型別的元素所需要的資料(對於類物件來說,可能需要多個資料構造出乙個物件)。此函式的功能是根據既定的排序規則,在容器介面卡適當的位置直接生成該新元素。

pop()

移除 priority_queue 容器介面卡中第乙個元素。

swap(priority_queue& other)

將兩個 priority_queue 容器介面卡中的元素進行互換,需要注意的是,進行互換的 2 個 priority_queue 容器介面卡中儲存的元素型別以及底層採用的基礎容器型別,都必須相同。

和 queue 一樣,priority_queue 也沒有迭代器,因此訪問元素的唯一方式是遍歷容器,通過不斷移除訪問過的元素,去訪問下乙個元素。

#include using namespace std;
建立乙個空的 priority_queue 容器介面卡,第底層採用預設的 vector 容器,排序方式也採用預設的 std::less 方法:

#include#include#include #include #include#includeusing namespace std;

templatevoid output(priority_queue&que)

cout << endl << endl;

}templatevoid output(priority_queue, greater> &que)

cout << endl << endl;

}int main()

; priority_queueque2

(values, values + 4)

; arrayarr

; priority_queueque3

(arr.begin

(), arr.end()

);output

(que3)

;//預設將序

priority_queue, greater> que4;

que4.push

(5);

que4.push

(2);

que4.push

(7);

output

(que4)

; return 0;

}

執行結果

` ``cpp

top: 4 size: 3

top: 3 size: 2

top: 2 size: 1

top: 1 size: 0

top: 2 size: 2

top: 5 size: 1

top: 7 size: 0

STL容器 優先佇列priority queue

priority queue顧名思義,是乙個具有權值概念的queue,它和queue一樣允許加入新元素 移除舊元素等功能。由於這是乙個queue,所以只允許在底部加入元素,從頂部取出元素。但優先佇列帶有權值概念,其內的元素自動按照元素的權值排序。權值最高者排在最前面。stl的priority que...

STL初步 優先佇列Priority queue

這個優先到底是如何優先?和普通佇列區別在哪?priority queue type,container,functional priority queue,less q priority queue,less a q priority queue,less b 優先佇列中沒有迭代器 也沒有clear...

優先順序佇列用法詳解(priority queue)

由於優先順序佇列的內部資料結構為堆,所以這裡先介紹堆的一些操作。堆的一些函式操作在algorithm標頭檔案中 在 first,last 範圍內 構造最大堆,first,last 可以是vector指標也可以是陣列指標 make heap first last make heap first las...