優先佇列 c

2021-09-13 03:54:48 字數 1153 閱讀 2547

1.標頭檔案:include < queue>

2.定義:優先佇列和佇列一樣,只能從隊尾插入元素,從隊首刪除元素。佇列中最大的元素總是位於隊首。可以通過過載《運算子來重新定義比較規則。

3.訪問 :和佇列不同,優先佇列沒有front() 和back() 函式,只能通過 top()來訪問隊首元素(堆頂元素,優先順序最高的函式)

4.基本常量優先佇列

.priority_queueq1; priority_queueq2;常用優先佇列

priority_queue ,greater> q;//使元素按照從小到大順序出隊 

priority_queue ,less> q2;//降序排列 ,無需宣告vector標頭檔案

其實這沒什麼區別,如果大到小的順序可以不會用後面的 vector ,less ,但是如果小到大就要過載,就要吧vector ,greater 加入了,其實後面的vector ,less 我查了一下,再c++裡面的priority_queue 是自動排號的堆,因為優先佇列的原理就是堆 參考。

5.過載(結構體)

`裡面``

struct fruit

};

外面

struct fruit;

struct cmp{

bool operator () (fruit a, fruit b){

return a.price 如果結構體內的資料較為龐大,建議使用引用來提高效率,即 const &,

struct node

{ int x,y;

bool operator < (const node & a) const

{ return x和sort 類似,但是我感覺 效果相反,我目前還沒打理解,就先理解成相反的效果,比如a.xempty() 如果隊列為空,則返回真

pop() 刪除佇列第乙個元素

push() 加入乙個元素

size() 返回佇列的元素個數

top() 取隊頂元素

使用top()函式之前,必須用empty() 判斷佇列是否為空

7.priority_queue 可解決 一些貪心問題,也可以優化dijkstra 演算法

參考

C 優先佇列

半題外話 優先佇列個人認為主要優點是可以在排序後進行類似於插入排序的操作,適合於需要在陣列排序後再次進行操作的題目 再由此產生一堆bug 本蒟蒻是在敲貪心的題時遇見的 弱得連個貪心都不會敲了呵 就開始了學 mo 習 ca 之旅 優先佇列的結構 佇列1.back 返回乙個引用,指向最後乙個元素 2.e...

c 優先佇列

優先佇列容器與佇列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有乙個特性,就是佇列中最大的元素總是位於隊首,所以出隊時,並非按照先進先出的原則進行,而是將當前佇列中最大的元素出隊。這點類似於給佇列裡的元素進行了由大到小的順序排序。元素的比較規則預設按元素值由大到小排序,可以過載 操作符來重新定義...

c 優先佇列

includeusing namespace std int main priority queueve 輸出 3 1 1 預設降序 第二個引數為儲存容器 emplace 原地構造 priority queue,greater ve 輸出 1 1 3 ve.push 1 ve.push 1 ve.p...