簡體   English   中英

將自定義比較器作為類方法的priority_queue

[英]priority_queue with custom comparator as a class method

我有這樣的代碼

priority_queue<int, std::vector<int>, decltype(&VD::CompareByDistance)> pqDistances(&VD::CompareByDistance);

哪里

class VD 
{
    ...
    bool CompareByDistance(int indexLeft, int indexRight) const;
};

但我得到錯誤

錯誤C2064:術語未求值為帶有2個參數的函數

我怎樣才能將類成員作為編譯器傳遞,問題是我希望比較器訪問其實例字段。 謝謝。

bool CompareByDistance(int indexLeft, int indexRight);

接受三個參數: this -pointer和both int

除此之外, priority_queue模板參數的參數數量錯誤:您希望在此VD哪個實例上調用此非靜態方法?

一種解決方法是像這樣將實例“隨身攜帶”:

VD v;
auto comp = [&](int i1, int i2) {return v.CompareByDistance(i1, i2);}

現在,此comp對象將成為您隊列的有效模板參數。 例如:

struct A{
    bool compare (int, int) const {return true;}
};

int main()
{
    A a;
    auto comp = [&](int i, int i2) {return a.compare(i, i2);};
    std::priority_queue<int, std::vector<int>, decltype(comp)> q (comp);
}

暫無
暫無

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

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