C ++ STL Контейнеры. Параметризация компаратора для каждого отдельного экземпляра

У меня есть набор 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

1

Решение

std::priority_queue имеет перегрузки конструктора, принимающие значение класса компаратора. Так что вам просто нужно спроектировать компаратор с сохранением состояния (что, как вы, кажется, уже сделали) и соответственно построить очередь приоритетов:

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

Другие решения

Вам нужно передать класс в качестве параметра шаблона и объект класса в качестве аргумента в конструктор, таким образом:

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

По вопросам рекламы [email protected]