У меня есть набор N объекты, представляющие координаты на карте, и я хочу, чтобы каждый из них содержал 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
имеет перегрузки конструктора, принимающие значение класса компаратора. Так что вам просто нужно спроектировать компаратор с сохранением состояния (что, как вы, кажется, уже сделали) и соответственно построить очередь приоритетов:
struct Vertex
{
std::priority_queue<Vertex*, std::vector<Vertex*>, DistanceComparer> pqueue;
explicit Vertex(fromVertex *v) : pqueue(v) {}
};
Вам нужно передать класс в качестве параметра шаблона и объект класса в качестве аргумента в конструктор, таким образом:
std::priority_queue<
TRVertex*,
std::vector<TRVertex*>,
DistanceComparer>
pqueue(DistanceComparer(fromVertex));