優先隊列(目前遇到的各種寫法)

最近遇到了,就總結一下。

優先隊列是按照其中的某一個參數,先輸出最大(或者最小)的那一個。

優先隊列的寫法:

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;是從小到大輸出的。

發佈了186 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章