【问题标题】:C++ STL priority queue not sorting correctlyC++ STL 优先级队列未正确排序
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 嗯,这就解释了。感谢您的帮助
猜你喜欢
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多