如何为STL优先级队列编写比较器类?

时间:2015-12-05 23:29:54

标签: c++ stl heap priority-queue

这是我有的两个班级

mutateAndGetPayload: ({username}) => {
  const newUser = new User({username});
  return newUser.save().then(user => ({userId: user.id}));
}

如果我想使用Dijkstra算法计算某个传递的最短路径,我需要使用优先级队列。我不知道如何为以下内容编写比较器类:

class Graph { private: unordered_map<int, Vertex> _vertices; }; class Vertex { private: unordered_map<Vertex *, int> _edges;//key: pointer to a vertex, data: edge weight from this vertex to a certain vertex int _load_factor = 0; int _id = 0; };

这是我在网上找到的:

priority_queue<Vertex, vector<Vertex>, PathWeightComparer> dijkstra_queue{};

lhs和rhs是指什么?它是class PathWeightComparer { public: bool operator()(Vertex lhs, Vertex rhs) { return (lhs.getPathWeight() > rhs.getPathWeight()); } }; 的顶点吗?如果是这样来获得这种比较的路径权重,我需要知道从哪些因素。我可以创建一个新的变量名称priority_queue并仅将其用于_path_weight吗?我不明白的主要是lhs和rhs的概念,它们是什么?还有一件事,我当前的比较器类将导致最大堆或最小堆?

非常感谢

1 个答案:

答案 0 :(得分:0)

std::priority_queue的目的是为您提供比较器函数选择的最高优先级元素的持续访问时间(最大,最小等)。

  

lhsrhs是指什么?

这就是你比较的方式。将两个元素传递给比较器函数,以确定哪一个元素优于另一元素(或具有更高的优先级)。比较是我们所说的二元运算(两个操作数),对吧?

  

我当前的比较器类将导致最大堆或最小堆?

您正在与>进行比较,从而与最大堆进行比较。

最后,正如我评论的那样,签名应该是:

bool operator()(Vertex const& lhs, Vertex const& rhs);