C ++ STL优先级队列未正确排序

时间:2014-12-11 00:56:52

标签: c++ stl priority-queue

我想要一个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)吗? 这是一个队列调试的图像,我已经注意到我认为是错误的:

enter image description here

我认为这可能与我对pq的不稳定理解有关,或者我正在初始化到HUGE_VAL的所有距离。

1 个答案:

答案 0 :(得分:6)

  

每当我更新航点的距离时,我的队列似乎都没有正确重新排序。

不,它不会。如果元素发生变化,队列不会重新排序;这样做只会破坏顺序。您需要删除并重新插入任何以影响排序的方式更改的元素。