優先佇列(priority queue)
普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 (largest-in,first-out)的行為特徵。
stl中的優先佇列-priorit_queue,包含在標頭檔案」queue」中,可以使用具有預設優先順序的已有資料結構;也可以再定義優先佇列的時候傳入自定義的優先順序比較物件;或者使用自定義物件(資料結構),但是必須過載好< 操作符。
1.優先佇列的常用操作
其中q.top()為查詢操作,在最小優先佇列中搜尋優先權最小的元素,在最大優先佇列中搜尋優先權最大的元素。q.pop()為刪除該元素。優先佇列插入和刪除元素的複雜度都是o(lgn),所以速度很快;另外,在優先佇列中,元素可以具有相同的優先權。q.empty() 如果隊列為空,則返回true,否則返回false
q.size() 返回佇列中元素的個數
q.pop() 刪除隊首元素,但不返回其值
q.top() 返回具有最高優先順序的元素值,但不刪除該元素
q.push(item) 在基於優先順序的適當位置插入新元素
priority_queue模板原型
2.優先佇列常用定義和過載運算子方法template
< class t ,class sequence=vector
,classcompare=less>class priority_queue;
①預設優先順序:
通過《操作符可知在整數中元素大的優先順序高。#include
using
namespace
std;priority_queue> q;
②傳入乙個比較函式,使用functional.h函式物件作為比較函式。
此時整數中元素小的優先順序高。#include
#include
using
namespace
std;priority_queue, vector
<
int>
, greater> > q;
③傳入比較結構體,自定義優先順序。
#include
using
namespace
std;struct
cmp};/**
struct cmp
/* 這樣寫也可以
bool operator < (const node &a) const
*/};/**
因為標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。而且自定義型別的《操作符與》操作符並無直接聯絡,故會編譯不過。
struct node
};**/
priority_queueq;
C 優先佇列
半題外話 優先佇列個人認為主要優點是可以在排序後進行類似於插入排序的操作,適合於需要在陣列排序後再次進行操作的題目 再由此產生一堆bug 本蒟蒻是在敲貪心的題時遇見的 弱得連個貪心都不會敲了呵 就開始了學 mo 習 ca 之旅 優先佇列的結構 佇列1.back 返回乙個引用,指向最後乙個元素 2.e...
c 優先佇列
優先佇列容器與佇列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有乙個特性,就是佇列中最大的元素總是位於隊首,所以出隊時,並非按照先進先出的原則進行,而是將當前佇列中最大的元素出隊。這點類似於給佇列裡的元素進行了由大到小的順序排序。元素的比較規則預設按元素值由大到小排序,可以過載 操作符來重新定義...
優先佇列 c
1.標頭檔案 include queue 2.定義 優先佇列和佇列一樣,只能從隊尾插入元素,從隊首刪除元素。佇列中最大的元素總是位於隊首。可以通過過載 運算子來重新定義比較規則。3.訪問 和佇列不同,優先佇列沒有front 和back 函式,只能通過 top 來訪問隊首元素 堆頂元素,優先順序最高的...