[英]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.