zoukankan      html  css  js  c++  java
  • 关于优先队列的总结II

    优先队列这个数据结构还是很有用的,可以帮我们解决很多棘手的排序的问题,所以再来细细看一下,

    priority_queue<Type, Container, Functional>

    Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。

    如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。如果想要优先输出小的元素,则要使用小顶堆

    priority_queue<int, vector<int>, greater<int> > p;

    这里注意,priority_queue的后两个参数是可以缺省的,但是如果要使用第三个参数,则必须使用第二个参数。

    我们可以自定义第三个参数,也就是自定义优先级

    (1)可以自己重载运算符<

    当然这里有三种方法,类内重载,类外重载,友元函数重载,具体不再赘述。

    另外,这里好像不能重载运算符>,会报错,好像是由于优先队列默认是小于封装的。

    (2)自定义比较类,重载括号,operator (),由less“继承”。

    struct cmpLess
    {
        bool operator ()(const Node & a,const Node & b)
        {
            return a.key<b.key;
        }
    };
    struct cmpGreater
    {
        bool operator ()(const Node & a,const Node & b)
        {
            return a.key>b.key;
        }
    };
    int main()
    {
        priority_queue<Node,vector<Node>,cmpLess> pqLess;
        priority_queue<Node,vector<Node>,cmpGreater> pqGreater;
        .......
    }
  • 相关阅读:
    ideaj项目切换不同版本的jdk
    物理机(window)安装linux系统
    linux jar自启动
    swap扩容
    tomcat加载外部项目
    springboot2.3.2控制台输出@RequestMapping路径
    linux磁盘扩容
    springboot-easycode配置文件修改
    List
    Map HashMap跟HashTable
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9420564.html
Copyright © 2011-2022 走看看