Я хочу иметь set точек, отсортированных по расстоянию до третьей точки. Возможно ли подобное?Пользовательский компаратор, который зависит от значения extern
Я попробовал это, но это не работает:
struct compStruct {
Point point;
bool operator()(const Point & a, const Point & b) const { return length(a-point)<length(b-point); }
};
void f(const Point & point) {
compStruct cs;
cs.point = point;
std::set<Point, &cs.operator()> pointSet;
}
Я не могу использовать лямбда, потому что я хочу использовать этот набор в качестве аргумента другой функции. Так что это не работает:
void g(std::set<Point, pointComp>) {}
void f(const Point & point) {
auto pointComp = [&](const Point & a, const Point & b){ return length(a-point)<length(b-point); };
std::set<Point, pointComp> s;
g(s);
}
Но тогда точка не была бы установлена. – gartenriese
Вы правы; вам нужно будет передать экземпляр компаратора, который уже имеет точку, установленную в конструкторе set. – sdzivanovich
Хорошо, это тоже работает. Благодаря! – gartenriese