![](/img/trans.png)
[英]std::priority_queue: Custom ordering without defining comparator class
[英]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.