码迷,mamicode.com
首页 > 其他好文 > 详细

优先队列的使用

时间:2020-04-26 01:37:44      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:优先队列   code   log   opera   大小   中比   方法   比较   span   

  堆,一种非常重要的数据结构。能实现数据的自动排序,而且排序时间复杂度为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中比较大小规则即可。

优先队列的使用

标签:优先队列   code   log   opera   大小   中比   方法   比较   span   

原文地址:https://www.cnblogs.com/wendcn/p/12776262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!