我希望得到set点数,按距离排序到第三点。有可能吗?
我试过了,但这不起作用:
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;
}
我不能使用lambda,因为我想将该set用作另一个函数的参数。所以这不起作用:
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);
}
答案 0 :(得分:2)
如果您更改声明std::set
实例的方式,那么您的第一个示例应该有效:
std::set<Point, compStruct> pointSet(cs);
模板不限制您使用函数类型;您可以指定一个用作比较器的类。
编辑 - 更新示例以正确传递比较器的实例。
答案 1 :(得分:1)
使用std::function
:
#include <functional>
using Cmp = std::function<bool(const Point & a, const Point & b)>;
void g(std::set<Point, Cmp>) {}
void f(const Point & point)
{
auto pointComp = [&](const Point & a, const Point & b){ return length(a-point)<length(b-point); };
std::set<Point, Cmp> s(pointComp);
g(s);
}