C++ STL——優先隊列的結構體表示方法


優先隊列是隊列的一種,但是自身具有一定的排序功能,所以不具有隊列“先進先出”的性質

剛剛接觸優先隊列,看過網上的用法后感覺還是太過於朦朧,所以打算自己寫一個稍微細節一點的。

頭文件

#include<queue>

常用操作

q.push() //放入元素
q.pop() //彈出元素
q.empty()//判斷隊列是否為空
q.top()//返回頭部元素
q.size()//返回隊列元素個數

聲明方式

priority_queue<int>q;

默認的情況是大頂錐,及先輸出的是元素較大的;

如:輸入5個數字:1 2 3 4 5 則輸出為: 5 4 3 2 1

priority_queue<int,vector<int>,less<int> >q1;
priority_queue<int,vector<int> ,greater<int> > q2;

上面兩種為標准的創建方式,第一個元素為元素類型,第二個為承裝元素的容器,第三個為排列方式。

其中,用less<int> 作為排序方式,則輸出為從大到小;

用greater<int>作位排序方式,則輸出為從小到大;

換句話說,less對應小根堆,greater對應大根堆。

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node
{
    int l,r;
    inline bool operator <(const node &a)const{
        return r<a.r;
    }
};
int main()
{
    priority_queue<node>w;
    for(int i=1;i<=5;i++)
    {
        int m,n;
        scanf("%d%d",&m,&n);
        w.push((node){m,n});
    }
    while(!w.empty())
    {
        node s =w.top();
        w.pop();
        cout<<s.l<<" "<<s.r<<endl;;
    }
}

上面的代碼就是今天主要的分享內容:構造結構體來重新定義比較先后及順序。

struct node
{
    int l,r;
    inline bool operator <(const node &a)const{
        return r<a.r;
    }
};

 

結構題里面包含兩個部分:第一是數據區域。第二部分就是重新定義比較級的代碼

關鍵在於重新定義比較級的 return;

如果你需要返回上面兩組數據中第一個較大的數,就需要 return l<a.l (這里注意是小於號,與重構比較基函數相反)

而需要返回兩組數據中第二個比較大的數,就需要 return r<a.r 

同理,優先輸出較小的數,和上面類似。

當然,也可以在里面按照自己的需要自己進行設計構造。

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM