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

问题描述 投票:1回答:1

我正在编写一个具有自己的比较器功能的优先级队列。我看到的每个地方都遵循以下实现,但无法弄清楚在类或结构中定义比较器函数的原理是什么?

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-为什么使用类或结构像主函数一样直接定义比较器函数并使用它?

c++ comparator
1个回答
1
投票

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

通常使用类,而不是替代的-函数指针-因为这样做可能会更快。函数指针本质上是运行时多态的一种形式。有时,对于优化人员而言,在调用时确定将要调用的函数是不可能的,或者太困难了。

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

功能对象还具有能够在其调用之间存储数据的优点,尽管并不总是需要利用这种可能性。


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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.