优先队列

在 c++ 的 stl 库中有封装好的 优先队列

1.

priority_queue<int>que; // 最普通的优先队列,默认优先取出最大的元素  

2 .

priority_queue<int, vector<int>, greater<int> >que; // 最普通的优先队列,默认优先取出最小的元素, 若将greater 改为 less ,优先取出最大的元素

3.

priority_queue<node>que;  // 结构体中必须要写运算重载符
   

模板:

#include<iostream>  
#include<functional>  
#include<queue>  
using namespace std;  
struct node  
{  
    friend bool operator< (node n1, node n2)  
    {  
        return n1.priority < n2.priority;  //"<"为从大到小排列,">"为从小到大排列  
    }  
    int priority;  
    int value;  
};  
int main()  
{  
    const int len = 5;  //也可以写在函数内  
    int i;  
    int a[len] = {3,5,9,6,2};  
    //示例1  
    priority_queue<int> qi;  //普通的优先级队列,按从大到小排序  
    for(i = 0; i < len; i++)  
        qi.push(a[i]);  
    for(i = 0; i < len; i++)  
    {  
        cout<<qi.top()<<" ";  
        qi.pop();  
    }  
    cout<<endl;  
    //示例2  
    priority_queue<int, vector<int>, greater<int> > qi2;  //从小到大的优先级队列,可将greater改为less,即为从大到小  
    for(i = 0; i < len; i++)  
        qi2.push(a[i]);  
    for(i = 0; i < len; i++)  
    {  
        cout<<qi2.top()<<" ";  
        qi2.pop();  
    }  
    cout<<endl;  
    //示例3  
    priority_queue<node> qn;  //必须要重载运算符  
    node b[len];  
    b[0].priority = 6; b[0].value = 1;  
    b[1].priority = 9; b[1].value = 5;  
    b[2].priority = 2; b[2].value = 3;  
    b[3].priority = 8; b[3].value = 2;  
    b[4].priority = 1; b[4].value = 4;  
   
    for(i = 0; i < len; i++)  
        qn.push(b[i]);  
    cout<<"优先级"<<'	'<<"值"<<endl;  
    for(i = 0; i < len; i++)  
    {  
        cout<<qn.top().priority<<'	'<<qn.top().value<<endl;  
        qn.pop();  
    }  
    return 0;  
}
东北日出西边雨 道是无情却有情
原文地址:https://www.cnblogs.com/ccut-ry/p/7777559.html