优先队列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优先队列相关的知识,希望对你有一定的参考价值。

在 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<<"优先级"<<‘\t‘<<"值"<<endl;  
    for(i = 0; i < len; i++)  
    {  
        cout<<qn.top().priority<<‘\t‘<<qn.top().value<<endl;  
        qn.pop();  
    }  
    return 0;  
}

 

以上是关于优先队列的主要内容,如果未能解决你的问题,请参考以下文章

线性表--08---优先队列

优先队列

优先队列实现dijkstra算法C++代码

基础扩展 | 16. 队列应用示例:广度优先搜索

优先队列代码实现

优先队列与堆