1

我有一组表示地图中坐标的n 个对象,我希望它们中的每一个都保持一个priority_queue,其中k最接近它们的位置。

问题是priority_queue接收谓词类而不是函数对象,所以我还没有找到为每个priority_queue指定不同参考点的方法

即类似的东西:

std::priority_queue<
  Vertex*, 
  std::vector<Vertex*>, 
  DistanceComparer(fromVertex)> 
  pqueue; // doesn't compile

相对于:

DistanceComparer::from = fromVertex;
std::priority_queue<
  TRVertex*, 
  std::vector<TRVertex*>, 
  DistanceComparer> 
  pqueue; // compiles but unhelpful

静态制作真的没有帮助,因为我需要为每个priority_queue使用不同的点参考

4

2 回答 2

1

您需要将类作为模板参数传递,并将类的对象作为参数传递给构造函数,因此:

std::priority_queue<
    TRVertex*, 
    std::vector<TRVertex*>, 
    DistanceComparer> 
  pqueue(DistanceComparer(fromVertex));
于 2013-04-16T16:36:33.823 回答
1

std::priority_queue具有构造函数重载,采用比较器类的一个 istance。因此,您只需将比较器设计为有状态的(您似乎已经这样做了),并相应地构造优先级队列:

struct Vertex
{
  std::priority_queue<Vertex*, std::vector<Vertex*>, DistanceComparer> pqueue;
  explicit Vertex(fromVertex *v) : pqueue(v) {}
};
于 2013-04-16T16:38:29.977 回答