C++ 为什么自定义比较器函数在类或结构中传递?

C++ 为什么自定义比较器函数在类或结构中传递?,c++,comparator,C++,Comparator,我正在编写一个优先级队列,它有自己的比较函数。我看到了下面的实现,但无法理解在类或结构中定义比较器函数背后的基本原理是什么 struct CompareHeight { bool operator()(pair<int, int> const p1, pair<int, int> const p2) { if(p1.first == p2.first) return p1.second > p2.seco

我正在编写一个优先级队列,它有自己的比较函数。我看到了下面的实现,但无法理解在类或结构中定义比较器函数背后的基本原理是什么

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;
}
struct CompareHeight{
布尔运算符()(成对常数p1,成对常数p2)
{ 
如果(p1.first==p2.first)
返回p1.second>p2.second;
返回p1.first
编辑1-为什么使用类或结构直接定义一个比较器函数,就像主函数一样并使用它

为什么自定义比较器函数在类或结构中传递

通常使用类,而不是函数指针,因为这样做可能更快。函数指针本质上是运行时多态性的一种形式。有时,优化人员不可能,或者很难在调用时确定要调用什么函数

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

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



<> P.S.使用LAMBDA生成函数对象类通常是更好的,而不是显式地写。

C++中的<代码>结构> <代码>和<代码>类<代码>是相同的,只是不同的默认访问(结构是公共的,类是私有的)。所以可以使用普通函数而不是将其作为成员函数?你能提供这个暗示或者传达的参考吗?@ Prasand参见C++标准的部分[函数·对象]。