[英]What does the return value of a priority queue custom comparator signify?
从我可以收集到的有关以下结构的优先级队列的自定义比较器开始,看起来像这样
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;
我不明白的是返回true
或false
的含义。 如果我返回true
,那么哪个元素首先被推送到队列,而哪个返回false
呢?
std::priority_queue
是最大堆,默认情况下使用std::less
(这是使用operator<
的函数对象)。 这意味着,如果比较返回false
,则第一个参数更接近顶部。 来自cppreference :
优先级队列是一个容器适配器,它提供对最大(默认)元素的恒定时间查找,但以对数插入和提取为代价。
可以提供用户提供的Compare来更改顺序,例如,使用
std::greater<T>
会使最小的元素显示为top()
。
标准参考是[alg.heap.operations] 。
旁注1:避免if (expr) return true; else return false;
if (expr) return true; else return false;
支持简单地return expr;
旁注2:您的operator()
应该是const
成员函数,并通过引用const
接受其参数,以避免不必要的复制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.