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

C++ 优先级队列自定义比较器的返回值表示什么?,c++,priority-queue,comparator,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? els

从以下结构的优先级队列的自定义比较器中,我可以得到如下信息

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;
struct事件
{
整数索引、到达、持续时间、类型、结束;
};
结构比较
{
布尔运算符()(事件a、事件b)
{
如果(a.arrivalpq;

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

std::priority\u队列
是一个最大堆,默认情况下使用
std::less
(这是一个使用
运算符的函数对象,为什么不阅读文档?您的
运算符()
是坏的。它应该总是返回一些东西。简单的方法是
返回a.arrival
@SergeyA,它告诉你
比较
必须是一个严格的弱排序-它不会告诉你结果使用的方向,对吗?@Barry,它还需要知道优先级队列是最大堆。如果比较结果为假,第二个参数更接近顶部,对吗?是的,但我没有完全理解。所以我评论道。我可能会结束这个问题…@AnukulSangwan我答案前两句的哪一部分不清楚?好的。在最大堆中,值较大的元素位于顶部,所以
x@AnukulSangwan没有无论哪种比较
cmp
,只要它建立了一个有效的顺序。如果
cmp(x,y)
返回
true
,这意味着
y
在该比较的基础上“更大”,因此它会进入顶部。(注意“更大”)这里仅参考比较,而不是哪个值实际与
相比更大)