繁体   English   中英

C ++ STL容器。 为每个不同的实例参数化一个比较器

[英]C++ STL Containers. Parametrize a comparer for each different instance

我有一组代表地图中坐标的n个对象,并且我希望每个对象都保留一个k距离其位置最近的priority_queue

问题是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使用不同的点引用

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

std::priority_queue<
    TRVertex*, 
    std::vector<TRVertex*>, 
    DistanceComparer> 
  pqueue(DistanceComparer(fromVertex));

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

struct Vertex
{
  std::priority_queue<Vertex*, std::vector<Vertex*>, DistanceComparer> pqueue;
  explicit Vertex(fromVertex *v) : pqueue(v) {}
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM