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
在该比较的基础上“更大”,因此它会进入顶部。(注意“更大”)这里仅参考比较,而不是哪个值实际与
相比更大)