从我可以收集的关于以下结构的优先级队列的自定义比较器,它看起来像这样
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
?
答案 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
来获取其参数,以避免不必要的副本。