我想要一个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的所有距离。
答案 0 :(得分:6)
每当我更新航点的距离时,我的队列似乎都没有正确重新排序。
不,它不会。如果元素发生变化,队列不会重新排序;这样做只会破坏顺序。您需要删除并重新插入任何以影响排序的方式更改的元素。