【发布时间】:2014-12-11 00:56:51
【问题描述】:
我想要一个经过排序的 Waypoint* 对象向量,以便距离最短的路点位于队列的顶部。
这是我的比较类:
class WaypointCompare {
public:
bool operator()(Waypoint* left, Waypoint* right) const {
return left->getDistance() < right->getDistance();
}
};
这是我初始化队列的方式:
std::priority_queue<Waypoint*, std::vector<Waypoint*>, WaypointCompare> queue;
每当我更新一个航点的距离时,我的队列似乎没有正确重新排序。就像这个例子一样,距离值最小的 Waypoint 对象不应该在队列的后面(顶部)(索引 10)吗? 这是队列的一些调试图像,我已经注意到我认为是错误的:
我认为这可能与我对 pq 的不稳定理解有关,或者我正在将所有距离初始化为 HUGE_VAL。
【问题讨论】:
-
distance是签名还是未签名?浮点数还是整数?为什么WaypointCompare是一个类而不仅仅是一个函数? -
@RedAlert 这是一个有符号的双精度类型
-
我担心您将其用于看起来像基于图形的搜索。这并不是
priority_queue的真正用途。
标签: c++ stl priority-queue