我是 C++ 的新手,我正在尝试使用 STL 优先级队列根据对象中的距离属性生成最小对象堆。我不完全确定我需要做什么,但我环顾四周,我发现我的优先队列看起来像这样:
std::priority_queue<Class, std::vector<Class>, object.distance> pq;
我不完全确定的是我如何着手重载比较运算符,首先将堆更改为最小堆,然后根据属性比较我的对象。任何帮助将不胜感激?
最佳答案
请注意,使用比较器的是堆操作,不是您的容器。
假设您的函数具有以下原型(prototype):static bool object::distance( Class, Class );
然后你可以使用 std::make_heap功能,像这样 std::make_heap( pq.begin(), pq.end(), object::distance )
可能值得注意的是,std::priority_queue 没有 begin 或 end 方法,并且不提供 STL 堆函数所需的 RandomAcessIterators。您试图从队列中创建一个堆这一事实表明您正在滥用容器。 priority_queue 已经有它自己的顺序。如果你想使用堆,你可以只使用 vector ,像这样:std::vector< Class > pq;
关于c++ - 基于对象中属性的最小对象堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086498/