zoukankan      html  css  js  c++  java
  • 数据结构·优先队列

    优先队列

    堆的传送门

    优先队列就是堆的在C++中的STL库的版本,这里放上三种声明优先队列的方式

    需要导入的头文件为< queue >

    默认写法

    priority_queue<int> q;
    priority_queue<node> q; //node可以定义为自己申明的结构体
    

    默认的队列优先级是从大到小,数据越优先级越高

    调用函数写法

    priority_queue<int,vector<int>,greater<int> >q; //小根堆
    priority_queue<int,vector<int>,less<int> >q; //大根堆
    //后面的两个"> >"不能连着写,会被编译器误认为位运算符
    

    这里的greater,less两个类型如果不用万能头的话,需要导入头文件< functional >,第二个vector是动态数组,属于一个容器类型参数,需要导入头文件< vector >

    重载小于号,自定义优先级

    struct node
    {
        int x,y;
        bool operator <(const node &a) const
        {
            return x<a.x;//重载后,这里所定义的优先级与符号相反,表示大的数优先级高
            			//如果是Sort则是优先级与符号符号相同,小的数在前面
        }
        //如果要从小到大输出,要改为return x>a.x;
    };
    struct node  
    {  
        int x, y;  
        friend bool operator < (node a, node b)  
        {  
            return a.x < b.x;//结构体中,x大的优先级高 
        }  
    };//这是另外一种重载方式,定义友元运算符
    priority_queue<node> q;
    

    操作函数

    接下来提供一下优先队列的基本操作函数

    q.push();//进队
    
    q.pop();//出队
    
    q.top();//返回队头元素,*不是front*
    
    q.size();//返回队的长度
    
    q.empty();//返回队是否为空,1为空
    
    q.back();//返回队尾元素
    

    选择一种好记的,手感打起来好的记下来就行了。

  • 相关阅读:
    ChromeDriver下载
    LR基础理论详解
    python中assert详解
    python定义类()中写object和不写的区别
    python list初始化技巧
    python list中append()方法和extend()方法区别
    python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别
    使用__slots__节省python内存技巧
    lambda表达式详解
    python处理数据问题详解
  • 原文地址:https://www.cnblogs.com/lightcoder/p/11437170.html
Copyright © 2011-2022 走看看