优先队列的使用

Posted wendcn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优先队列的使用相关的知识,希望对你有一定的参考价值。

  堆,一种非常重要的数据结构。能实现数据的自动排序,而且排序时间复杂度为O(nlogn),在n达到10^4时,O(n2)级算法就容易超时,但堆排序不会。堆可调用STL系统函数,简化代码,容易书写。一般情况,如果堆元素为数、字符、字符串都可有用默认的排序规则。如果元素是pair类型,其比较大小的方式为先比较第一个元素(pair.first),如果第一个元素相等,则比较第二个元素(pair.seconed)。如果元素是结构体呢?没有默认的排序,我们需要手动添加比较规则。

结构体比较实现方法有两种:

  方法一:重载"<"运算符。

struct person{
    string name;
    int age;
    bool operator < (const person x) const
    {
        return age<x.age;
    }
};

  在优先队列中定义可以简写为priority_queue<person>hp;

  方法二:重写仿函数。

struct cmp{
    bool operator ()(const person a,const person b)
    {
        return a.age<b.age;
    }
};

  在优先队列中可以定义为:priority_queue<person,vector<person>,cmp>hp;

  如果你想改变大根/小根,只需要改变cmp中比较大小规则即可。

以上是关于优先队列的使用的主要内容,如果未能解决你的问题,请参考以下文章

基础扩展 | 16. 队列应用示例:广度优先搜索

如何使用优先队列对链表进行排序

优先队列实现dijkstra算法C++代码

使用优先级队列的 K 排序数组 - C++

如何使用优先队列根据键值对的值进行排序

线性表--08---优先队列