优先级队列自定义比较器的返回值表示什么?

时间:2016-03-17 18:51:21

标签: c++ priority-queue comparator

从我可以收集的关于以下结构的优先级队列的自定义比较器,它看起来像这样

struct event
{
    int index, arrival, duration, type, end;
};

struct compare
{
    bool operator() (event a, event b)
    {
        if (a.arrival < b.arrival) return true; // which one gets pushed first?
        else return false;
    }
};
...
priority_queue < event, vector <event>, compare > pq;

我不理解的是返回truefalse的含义。如果我返回true,哪个元素首先被推送到队列,哪个,如果我返回false

1 个答案:

答案 0 :(得分:2)

std::priority_queue max 堆,默认情况下使用std::less(使用operator<的函数对象)。这意味着如果比较返回false,则第一个参数更接近顶部。来自cppreference

  

优先级队列是一个容器适配器,它提供最大(默认)元素的常量时间查找,但代价是对数插入和提取。

     

可以提供用户提供的比较来更改排序,例如使用std::greater<T>会导致最小元素显示为top()

标准参考是[alg.heap.operations]

附注#1:避免仅仅if (expr) return true; else return false;

return expr;

附注2:您的operator()应该是const成员函数,并通过引用const来获取其参数,以避免不必要的副本。