參考博文:
最近做到一些使用堆排序的題,因此總結一下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;
元素型別為pairpriority_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 元素...