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;
        .......
    }
  • 相关阅读:
    团队选题报告
    第二次结对作业
    高级软件工程团队第一次作业
    第一次结队作业
    高级软件工程第二次作业
    高级软件工程第一次作业
    洛谷 题解 2165 [AHOI2009]飞行棋
    洛谷 题解 P1684 考验
    洛谷 题解 P4613 【[COCI2017-2018#5] Olivander】
    洛谷 题解 P5534 【【XR-3】等差数列】
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9420564.html
Copyright © 2011-2022 走看看