为什么在 Class 或 Struct 中传递自定义比较器函数?

Why custom comparator functions are passed in Class or Struct?

我正在编写一个具有自己的比较器函数的优先级队列。我看到以下实现的每个地方都无法弄清楚在 class 或 struct?

中定义比较函数的基本原理是什么
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 直接像 main 函数一样定义比较器函数并使用它?

Why custom comparator functions are passed in Class or Struct?

类 经常被使用而不是替代 - 函数指针 - 因为这样做可能更快。函数指针本质上是运行时多态性的一种形式。有时不可能,或者对于优化器来说太难在调用时确定要调用什么函数。

相比之下,class 的成员函数运算符重载在编译时是已知的,因为 class 在编译时是已知的。至少,有一个优点是不必通过指针间接进行调用。在某些情况下,这甚至可能打开内联扩展的大门,并通过它进行其他优化。

函数对象还具有能够跨调用存储数据的优势,尽管并不总是需要利用这种可能性。


P.S。通常最好使用 lambda 生成函数对象 class 而不是显式编写它。