C STL的priority queue用法總結

2021-08-17 04:22:06 字數 3014 閱讀 9097

翻了很多部落格的總結

1、標頭檔案

#include

2、定義

[cpp]

view plain

copy

priority_queue<

int> p;  

3、優先輸出大資料

priority_queue

type為資料型別, container為儲存資料的容器,functional為元素比較方式。

如果不寫後兩個引數,那麼容器預設用的是vector,比較方式預設用operator

例如:[cpp]

view plain

copy

#include

#include

using

namespace

std;  

intmain()  

return

0;  

}  

輸出:

4、優先輸出小資料

方法一:

[cpp]

view plain

copy

priority_queue<

int, vector<

int>, greater<

int> > p;  

例如:[cpp]

view plain

copy

#include

#include

using

namespace

std;  

intmain()  

return

0;  

}  

輸出:

方法二:自定義優先順序,過載預設的 < 符號

例子:[cpp]

view plain

copy

#include

#include

#include

using

namespace

std;  

struct

node  

};  

struct

cmp  

};  

intmain()//while

//getchar();

return

0;  

}  

輸出:

#include

#include

#include

using

namespace

std;

struct

package

; bool

operator

//自定義排序規則

intmain()

);tmp.push();

intsize = tmp.size();

while

(size--)

}以結構體time為例:

[cpp]

view plain

copy

struct

time;  

使用優先佇列時,如果需要對time中的start從小到大排序,有兩種方法:

[cpp]

view plain

copy

priority_queuepq;  

一.在結構體外過載結構體小於運算子:

[cpp]

view plain

copy

bool

operator 

const

time& a,

const

time& b)  //這裡以大於過載小於是因為預設情況下,優先佇列是以大的作為隊首,這樣一反,就可以再預設情況下使得小的作為隊首

二.直接在結構體中過載小於運算子:

[cpp]

view plain

copy

struct

time    

};    

實質上來說是一樣的。。。。

另外要注意的是:引數列表中的const不能省略,否則報錯~~

預設的優先佇列是個極大堆,如果要改變優先佇列中元素的優先順序,有下面這些方法

[cpp]

view plain

copy

struct

cmp1    

};      

struct

cmp2    

};      

struct

node1    

};      

struct

node2    

};     

priority_queue

>q1;

//採用預設優先順序構造佇列       

priority_queue

,vector<

int>,cmp1>q2;

//最小值優先     

priority_queue

,vector<

int>,cmp2>q3;

//最大值優先     

priority_queue

,vector<

int>,greater<

int> >q4;

//注意「>>」會被認為錯誤,     

//這是右移運算子,所以這裡用空格號隔開,最小值優先   

priority_queue

,vector<

int>,less<

int> >q5;

//最大值優先      

priority_queueq6;  //自定義優先順序  

priority_queueq7;  

用二叉堆實現優先佇列 Priority Queue

優先佇列出隊跟佇列一樣,從隊首出隊 但隊內的次序由優先順序決定,即優先順序高的資料項可以插隊,排到前面。二叉堆能夠將優先佇列的入隊和出隊複雜度都保持在o logn 完全二叉樹,如果用順序表來表示的話,設根節點下標為1,若某節點下標為p,則其左子節點下標為2p,右子節點下標為2p 1,父節點下標為p ...

C STL的查詢演算法

假設你有乙個序列容器,或者有一對迭代器標識了乙個區間,現在你希望在容器中查詢一些資訊,這樣的查詢工作如何進行呢?你的選擇往往是 count,count if,find,find if,binary search,lower bound,upper bound,equal range.該如何選擇呢?現...

C STL容器的理解

1.容器 資料結構 演算法。相當於是為複雜的資料設計一種專門用於存放該資料的東西。用於開發中傳遞複雜的資料。2.模板函式只能寫在標頭檔案中,不能單獨宣告。3.stl容器分為三類 1 順序容器類 vector 陣列。查詢快,插入慢。加入的資料與資料大小有關 操作 empty 返回bool型,表示vec...