最近遇到了,就總結一下。
優先隊列是按照其中的某一個參數,先輸出最大(或者最小)的那一個。
優先隊列的寫法:
priority_queue<int>q;//括號裏可以填各種數據類型
priority_queue<node>q;
priority_queue<int,vector<int>,greater<int> >q;//最後的"> >",不能連着寫
priority_queue<int,vector<int>,less<int> >q;
給出優先隊列的基本操作:
q.push();//進隊
q.pop();//出隊
q.top();//返回隊頭元素,與普通隊列不同(q.front())
q.size();//返回隊裏有多少個元素
q.empty();//返回隊是否爲空
q.back();//返回隊尾元素
首先介紹第一種:
priority_queue<int>q;
舉個例子:1 5 7 0 3 4
如果是默認的,什麼都不寫,是按照從大到小排列的。輸出:7 5 4 3 1 0(其他數據類型,一樣),(從小到大,下面會講)
第二種:
priority_queue<node>q;
結構體的優先隊列與數組不一樣,要用到運算符重載來寫。
例如:
struct node
{
int x,y;
//***特別注意***
//運算符重載,如果是優先隊列的排序,下面是按照x,從大到小輸出
//如果是sort中的cmp,那就是從小到大排序的
bool operator <(const node &a) const
{
return x<a.x;
}
//如果要從小到大輸出,要改爲return x>a.x;
};
第三種和第四種:
這兩種與第一種是對應的,都是對單個數的操作。
priority_queue<int,vector<int>,greater<int> >q;//最後的"> >",不能連着寫
priority_queue<int,vector<int>,less<int> >q;
第一種提到了,從大到小的輸出,它與priority_queue< int,vector,less >q;的功能一樣。
而priority_queue< int,vector,greater >q;是從小到大輸出的。