我正在尝试理解下面的代码:
结构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/