优先队列(张磊大佬分享的)

看了半天的优先队列没看懂

还是找了下大佬整理的资料看着

代码很简单,所以就不解释了,等找到优先队列的题目再来更新吧

#include<iostream>
#include<cstdio>
#include<functional>
#include<queue>
#include<vector>
using namespace std;

struct cmp1{
    bool operator () (int &a,int &b){
        return a>b; //最小值优先
    }
};

struct cmp2{
     bool operator () (int &a,int &b){
         return a<b; //最大值优先
     }
};

//定义结构,使用运算符重载,自定义优先级2

struct number1{
    int x;
    bool operator < (const number1 &a) const{
        return x<a.x; //最大值优先
    }
};

struct number2{
    int x;
    bool operator < (const number2 &a) const {
        return x>a.x; //最小值优先
    }
};

int main()
{
    priority_queue<int>que; //采用默认优先级构造队列

    priority_queue<int,vector<int>,cmp1>que1; //最小值优先

    priority_queue<int,vector<int>,cmp2>que2; //最大值优先

    priority_queue<int,vector<int>,greater<int> >que3; //最小值优先

    priority_queue<int,vector<int>,less<int> >que4; //最大值优先

    priority_queue<num1>que5;

    priority_queue<num2>que6;

    que1.empty(); //判断一个队列是否为空

    que1.pop(); //删除队顶元素

    que1.push(); //加入一个元素压入栈顶

    que1.size(); //返回优先队列中拥有的元素个数

    que1.top(); //返回优先队列的队顶元素(不删除)

    //时间复杂度为O(logn) n为队列中元素的个数
}

push(x) 将x压入队列的末端

pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值

front() 返回第一个元素(队顶元素)

back() 返回最后被压入的元素(队尾元素)

empty() 当队列为空时,返回true

size() 返回队列的长度

补题了 :

在紫书上找到一到优先队列的题  p120   UVA136

//丑数是指不能被2,3,5以外的其它素数整除的数,把丑数从小到达排列起来,结果如下:
//     1,2,3,4,5,6,8,9,10,12……
//    求第1500个丑数?
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
const int coeff[3]={2,3,5};
int main()
{
    priority_queue<ll,vector<ll>,greater<ll> >gg;//优先队列定义
    set<ll>s;
    gg.push(1);
    s.insert(1);
    for(int i=1; ;i++)
    {
        ll x=gg.top();
        gg.pop();
        if(i==1500)
        {
            cout<<"The 1500'th ugly number is "<<x<<".
";
            break;
        }
        for(int j=0;j<3;j++)
        {
            ll x2=x*coeff[j];

        if(!s.count(x2)){
            s.insert(x2);
            gg.push(x2);
        }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/huangzzz/p/7795204.html