[英]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.