ke3*_*pup 1 c++ operator-overloading
我试图理解下面的代码说:
struct compare_pq;
struct compare_pq {
bool operator() (Events *& a, Events *& b);
};
std::priority_queue<Events *, std::vector<Events *>, compare_pq> eventList;
Run Code Online (Sandbox Code Playgroud)
我查看了priority_queue是什么以及它如何声明但无法退出以了解compare_pqpriority_queue中正在执行的操作eventList.还有什么operator()做我自己从未见过*&并且空操作符重载operator()!
任何帮助,将不胜感激.谢谢
operator()是函数调用操作符.它允许您使用类类型的对象,就好像它是一个函数,例如,
compare_pq my_comparator;
bool result = my_comparator(a, b);
Run Code Online (Sandbox Code Playgroud)
重载的类类型的对象operator()通常称为函数对象或仿函数.
第三个模板参数std::priority_queue用于比较功能.默认情况下,优先级队列使用它对元素进行排序std::less,这适用operator<于两个元素.您可以使用任何带有两个元素的函数(或函数对象)并返回一个布尔值,指示第一个是否小于第二个元素.在这种情况下,"较小"是一个相对术语:top()优先级队列是当前队列中的"最大"元素.
在这种情况下,您需要使用自定义比较函数,因为优先级队列存储指针,因此默认情况下它会按指针值对元素进行排序.自定义比较器(可能)取消引用指针并对指向对象执行一些比较.
Events*&只是对指向Events对象的指针的引用.它确实不需要通过引用传递.因为它只是一个指针,所以它可以通过值传递(例如Events*).如果由于某种原因选择使用引用,则它应该是const引用.