priority queue的使用 詳細總結

2021-09-21 18:30:48 字數 2100 閱讀 7923

參考博文:

最近做到一些使用堆排序的題,因此總結一下priority_queue

優先佇列也是佇列,因此標頭檔案為,與queue的不同在於可以定義資料的優先順序,在插入資料時會自動排序。

基本操作

定義

priority_queue
std:

:string wrds ;

std:

:priority_queue:string, std:

:vector:string>

, std:

:greater:string>>

words

(std:

:begin

(wrds)

, std:

:end

(wrds)

);

可以用任何容器的迭代器(開始和結束)來初始化優先佇列。這裡使用operator>()對元素物件進行比較,從而排序。

std:

:vector<

int> values

;std:

:priority_queue<

int>

numbers

(std:

:less<

int>()

,values)

;//使用大括號也可以

std:

:priority_queue<

int> numbers

;//模板指定了比較方式,建構函式的第乙個引數也必須傳入

std:

:priority_queue:string, std:

:vector:string>

, std:

:greater:string>>

words

(std:

:greater:string>()

,w);

迭代器

priority_queue沒有迭代器。只能用top和pop依次取出元素來遍歷。且如此遍歷會將佇列清空。

內建型別舉例

//公升序佇列 (小頂堆)

priority_queue <

int,vector<

int>

,greater<

int>

> q1;

//降序佇列 (大頂堆)

priority_queue <

int,vector<

int>

,less<

int>

> q2;

元素型別為pair
priority_queueint,

int>

> q3;

pair<

int,

int>b(

1,2)

;pair<

int,

int>c(

1,3)

;pair<

int,

int>d(

2,5)

;a.push

(d);

a.push

(c);

a.push

(b);

while

(!q3.

empty()

)

自定義型別

類內運算子過載

struct test1

bool operator<

(const test1& a)

const};

intmain()

system

("pause");

}//輸出 3 2 1

類外運算子過載
struct test1};

bool operator<

(const test1& a,

const test1& b)

重寫仿函式
struct test1};

struct func};

intmain()

system

("pause");

}

C STL的priority queue用法總結

翻了很多部落格的總結 1 標頭檔案 include 2 定義 cpp view plain copy priority queue int p 3 優先輸出大資料 priority queue type為資料型別,container為儲存資料的容器,functional為元素比較方式。如果不寫後兩個...

priority queue的常見用法

其底層是用堆來進行實現的 在優先佇列中,隊首元素一定是當前佇列中優先順序最高的那乙個 當然,可以在任何時候往優先佇列裡面加入push元素 而優先佇列底層的資料結構堆 heap 會隨時調整結構 使得每次的隊首元素都是優先順序最大的 1 定義 priority queuename 2 容器內元素的訪問 ...

PriorityQueue實現原理

priorityqueue priorityqueue是個基於優先順序堆的極大優先順序佇列 此佇列按照在構造時所指定的順序對元素排序,既可以根據元素的自然順序來指定排序 參閱 comparable 也可以根據 comparator 來指定 這取決於使用哪種構造方法。優先順序佇列不允許 null 元素...