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