優先隊列具有隊列的所有特性,包括基本操作,只是在這基礎上添加了內部的一個排序,它本質是一個堆實現的
定義:priority_queue<Type, Container, Functional> ,也可以不寫後兩部分內容,默認從大到小排序
Type 就是數據類型,Container 就是容器類型(Container必須是用數組實現的容器,比如vector,deque等等,但不能用 list。STL裏面默認用的是vector),Functional 就是比較的方式,當需要用自定義的數據類型時才需要傳入這三個參數,使用基本數據類型時,只需要傳入數據類型,默認是大頂堆
priority_queue:優先隊列,自動排序,默認爲優先級較高的在前,但是要注意的是,它對int型變量的默認排序是從大到小,因爲它認爲值越大,優先級越高,與sort排序剛好相反。
1.對int型變量
priority_queue<int, vector < int > ,less < int > >從大到小排列
priority_queue<int , vector < int >,greater< int> >從小到大排列
2.對結構體排序,要重載一下 " < ",只能重載小於號
從小到大排列
struct node
{
int x,y;
};
bool operator <( const node & a, const node & b)//重載運算符
{
if(a.x!=b.x) return a.x>b.x;
else
return a.y>b.y;
}
priority_queue <node > que ;
從大到小排列
struct node
{
int x,y;
};
bool operator <( const node & a, const node & b)//重載運算符
{
if(a.x!=b.x) return a.x<b.x;
else
return a.y<b.y;
}
priority_queue <node > que ;