簡體   English   中英

為什么在 Class 或 Struct 中傳遞自定義比較器函數?

[英]Why custom comparator functions are passed in Class or Struct?

我正在編寫一個優先級隊列,它有自己的比較器 function。我看到以下實現的每個地方都無法弄清楚在 class 或結構中定義比較器 function 的基本原理是什么?

struct CompareHeight { 
    bool operator()(pair<int, int> const p1, pair<int, int> const p2) 
    { 
        if(p1.first == p2.first)
            return p1.second > p2.second; 
        return p1.first < p2.first; 
    } 
}; 

int main(){
    priority_queue<pair<int, int >, vector<pair<int,int> >, CompareHeight> p;
}

編輯 1 - 為什么使用 class 或 struct 直接定義一個比較器 function 就像 main function 一樣並使用它?

為什么在 Class 或 Struct 中傳遞自定義比較器函數?

通常使用類而不是替代方法——function 指針——因為這樣做可能更快。 function 指針本質上是運行時多態性的一種形式。 有時,優化器無法在調用時確定 function 將被調用什么,或者對於優化器來說太難了。

相比之下,class 的成員 function 運算符重載在編譯時是已知的,因為 class 在編譯時是已知的。 至少,有一個優點是不必通過指針間接進行調用。 在某些情況下,這甚至可能為內聯擴展打開大門,並通過它進行其他優化。

Function 對象還具有能夠跨調用存儲數據的優勢,盡管並不總是需要利用這種可能性。


PS 通常最好使用 lambda 生成 function object class 而不是顯式寫入。

暫無
暫無

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

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