priority queue(優先佇列)用法總結

2021-07-09 18:22:53 字數 2603 閱讀 8197

優先佇列(priority queue)

優先順序佇列

是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素。

首先它是乙個佇列,但是它強調了「優先」二字,所以,已經不能算是一般意義上的佇列了,它的「優先」意指取隊首元素時,有一定的選擇性,即根據元素的屬性選擇某一項值最優的出隊~

關於priority_queue

1,關於stl中的priority_queue:確定用top()檢視頂部元素時,該元素是具有最高優先順序的乙個元素. 呼叫pop()刪除之後,將促使下乙個元素進入該位置. 

2,如同stack和queue,priority_queue是乙個基於基本序列容器進行構建的介面卡,預設的序列器是vector.

priority_queue//  type 為資料型別   

// container 為儲存資料的容器, 必須是用陣列實現的容器,比如 vector, deque 但不能用list。stl裡面預設用的是 vector

// compare為元素比較方式。. 比較方式預設用 operator< , 所以如果你把後面倆個引數預設的話,優先佇列就是大頂堆,隊頭元素最大。

常用的操作如下:

empty()  如果優先隊列為空,則返回真 

pop()  刪除第乙個元素 

push()  加入乙個元素 

size()  返回優先佇列中擁有的元素的個數 

top()  返回優先佇列中有最高優先順序的元素 

但是在使用時必須注意:priority_queue放置元素時,不會判斷元素是否重複。(因為在模板的第二個引數時順序容器,不能保證元素的唯一性)此外可以替代預設的compare函式

priority_queue 呼叫 stl裡面的 make_heap(), pop_heap(), push_heap() 演算法

實 現,也算是堆的另外一種形式。

先寫乙個用 stl 裡面堆演算法實現的與真正的stl裡面的 priority_queue 用法相

似的 priority_queue, 以加深對 priority_queue 的理解

#include#include#includeusing namespace std;  

class priority_queue

void pop()

int top()

int size()

bool empty()

};

// stl裡面的 priority_queue 寫法與此相似,只是增加了模板及相關的迭代器什麼的。

int main()

return 0;

}

看例子:

#include#includeusing namespace std;  

int main()

getchar();

return 0;

}

如果要用到小頂堆,則一般要把模板的三個引數都帶進去。

stl裡面定義了乙個仿函式 greater<>,對於基本型別可以用這個仿函式宣告小頂堆。( less< >則是從大到小)

例子:

#include #include using namespace std;    

int main()

getchar();

return 0;

}

對於自定義型別,則必須自己過載 operator< 或者自己寫仿函式

先看看例子:

#include#includeusing namespace std;  

struct node

};

bool operator < (node a, node b)

int main()

};

struct cmp

};

int main()

getchar();

return 0;

}

以上例子的

struct cmp  

};

為重點。

例2:

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

struct node

node( int n )

};

struct mycmp: binary_function< node,node,bool >

};

/* 根據實踐即便不從 binary_function 派生也是可以使用的

class mycmp

};

*/

int main()

; sort(arr,arr+6,mycmp() );

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 堆 是乙個除了底層節點外的完全填滿的二叉樹,底層可以不完全,左到右填充節點。而最小堆意味著,任一非終端節點的資料值均不大於其左子節點和...