zoukankan      html  css  js  c++  java
  • 优先队列(张磊大佬分享的)

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

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

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

    #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;
    }
  • 相关阅读:
    Vuejs --01 起步
    ajax利用FormData异步文件提交
    格式化JSON数据
    获取url中的参数
    xampp配置多端口访问
    自动识别移动端还是PC端
    一些常见的shell命令和git命令
    网站性能优化之减少HTTP请求
    ajax学习笔记
    canvas随笔
  • 原文地址:https://www.cnblogs.com/huangzzz/p/7795204.html
Copyright © 2011-2022 走看看