1. 程式人生 > >【C++】STL——容器介面卡

【C++】STL——容器介面卡

1、stack

2、priority_queue           #include<queue>

(1)基礎介紹

priority_queue 優先佇列,其底層是用堆來實現的。

模板宣告帶有三個引數:

priority_queue<Type, Container, Functional>

其中Type為資料型別, Container 為儲存資料的容器,Functional 為元素比較方式。

Container必須是用陣列實現的容器,比如 vector, deque 但不能用 list.

STL裡面預設用的是 vector.比較方式預設用 operator< , 所以如果你把後面倆個引數預設的話,

預設的優先佇列就是大頂堆,隊頭元素最大。

   //等價  最大優先佇列
    priority_queue<int> q;
    priority_queue<int,vector<int>,less<int> >;//後面有一個空格

其中第二個引數( vector ),是來承載底層資料結構堆的容器,第三個引數( less ),則是一個比較類,less 表示數字大的優先順序高,而 greater 表示數字小的優先順序高

//最小優先佇列 隊頭最小    
priority_queue<int,vector<int>,greater<int
> >q;
優先順序佇列佇列是先進先出的一種資料結構,優先順序佇列是按照優先順序大小pop出佇列(2)主要操作:empty():如果佇列為空,返回truepop():刪除佇列頂部元素push():佇列中加入一個元素top():檢視佇列頂部元素size():返回佇列中元素的個數容器預設是vector,比較方式預設是less,預設比較是operator< ,產生的結果預設是大根堆(最大堆)(3)幾種宣告方法:priority_queue<int> pq1;   //大根堆priority_queue<int, vector<int>, greater<int> > pq2; //知道如何產生小根堆(最小堆)了吧?
priority_queue<Node> pq3 ;    //自定義結點,大根堆,此時要過載operator<priority_queue<Node, vector<Node>, cmp > pq4; //自定義結點,小根堆,cmp是自己寫的比較函式,因為greater<Node>沒定義,過載opreator>沒用