簡體   English   中英

優先級隊列定制比較器的返回值表示什么?

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

我不明白的是返回truefalse的含義。 如果我返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM