簡體   English   中英

使用自定義比較器返回priority_queue

[英]Returning a priority_queue with custom comparator

我有一個需要根據某些輸入參數返回排序列表的函數。 我選擇了一個std::priority_queue來保存此列表。

但是編譯器給了我一個我不認識的錯誤。 這是我的代碼:

struct DepthCompare {
    bool operator()
        (const struct inst *&lhs, const struct inst *&rhs) const
    {
        return lhs->depth < rhs->depth;
    }
};

typedef priority_queue<struct inst*> HeuristicList;
HeuristicList getHeuristicList(struct BasicBlock &) {

    HeuristicList ret( DepthCompare );
    return ret;
}

編譯器說,在返回語句的行上conversion from 'HeuristicList (*)(DepthCompare)' to non-scalar type 'HeuristicList' requested

看起來我沒有嘗試返回指針。 怎么了

你有兩個問題。

要使用自定義比較器,必須將比較器類型指定為第三個模板參數:

typedef priority_queue<inst*, vector<inst*>, DepthCompare> HeuristicList;

HeuristicList ret( DepthCompare ); 被解釋為函數聲明,而不是變量聲明,給出您所看到的錯誤。 您需要傳遞比較器的實例,並確保不能將其解釋為函數聲明:

HeuristicList ret = HeuristicList(DepthCompare());

但是,由於構造函數的第一個參數是可選的,並且默認為默認構造的比較器,因此您可以簡單地編寫

HeuristicList ret;

或者,由於您只是立即返回變量,

return HeuristicList();

注意,比較器是priority_queue的第三個模板參數。 您必須像這樣聲明您的priority_queue

typedef priority_queue<inst*, vector<inst*>, DepthCompare> HeuristicList;

假設您要使用vector作為后備容器(默認)。

還要注意,在比較器函子中,您想將參數聲明為對指針的const引用。 您所擁有的是對指向const的指針的引用。 你要這個:

bool operator()(inst* const& lhs, inst* const& rhs) const

您也不需要將比較器對象的實例傳遞給priority_queue構造函數,因為默認的比較器構造函數就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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