需要 C++ 代码说明

标签 c++ operator-overloading

我正在尝试理解下面的代码:

结构compare_pq;

struct compare_pq {
    bool operator() (Events *& a, Events *& b);
};

std::priority_queue<Events *, std::vector<Events *>, compare_pq> eventList;

我查看了 priority_queue 是什么以及它是如何声明的,但无法理解 compare_pq 在 priority_queue eventList 中做了什么。还有 operator() 做了什么,因为我以前从未见过 *& 和空运算符重载 operator()!

如有任何帮助,我们将不胜感激。谢谢

最佳答案

operator()是函数调用运算符。它允许您像使用函数一样使用类类型的对象,例如,

compare_pq my_comparator;
bool result = my_comparator(a, b);

重载类类型的对象 operator()经常被称为函数对象或仿函数。

std::priority_queue的第三个模板参数用于比较功能。默认情况下,优先级队列使用 std::less 对其元素进行排序。 , 适用 operator<到两个元素。您可以使用任何函数(或函数对象),它接受两个元素并返回一个 bool 值,指示第一个是否小于第二个。在这种情况下,“较小”是一个相对术语:top()优先级队列的元素是当前队列中的“最大”元素。

在这种情况下,您需要使用自定义比较函数,因为优先级队列存储的是指针,因此默认情况下它会根据指针值对元素进行排序。自定义比较器(可能)取消引用指针并对指向的对象执行一些比较。

Events*&只是对指向 Events 的指针的引用目的。它真的不需要通过引用传递。由于它只是一个指针,因此可以按值传递(例如 Events* )。如果出于某种原因确实选择使用引用,则它应该是常量引用。

关于需要 C++ 代码说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2769838/

相关文章:

c++ - 点燃缓存加载时间的选择查询

c++ - 如何访问 C++ 中的特定范围?

c++ - 如何在 STL 中合并两个映射并应用函数来解决冲突?

c++ - 使用accumulate时,C++中的operator+不匹配

c++ - 运算符新字段值在多重继承中有错误的偏移量

c++ - 我可以在这里重载基类中的 << 运算符吗?

c++ - ->* 运算符应该在何时何地重载?

用于验证相等运算符的 C++ 测试随着时间的推移与结构保持一致

c++ - operator<<() 由于继承而无法从模板解析

c++ - 无法从友元函数访问类的私有(private)成员? 'ostream' 不是 'std' 的成员?