c ++基于到外部点的距离对向量进行排序

阿姆斯特鲁

我想知道是否存在一种基于某些外部值对向量进行排序的好方法。例如,我有一个向量,其中k个最近的邻居到一个点。我想根据它们到查询点的距离对向量进行排序。查询点不包括在结果中,并且std :: sort允许您为向量中的两个元素(而不是每个元素与固定点)定义比较函数。是否有任何预先构建的方法可以执行这种排序?还是我需要构建自己的自定义排序算法?谢谢

科里·克莱默(Cory Kramer)

如果您有一些班级Point,而您想针对的要点是

Point p

还假设points定义为

std::vector<Point> points;

并且您有一些函数dist需要2Point并返回距离(例如,欧几里得距离),例如

double dist(const Point& lhs, const Point& rhs)
{
    // compute Euclidean distance or whatever
}

然后您可以使用std::sortlambda函数

std::sort(begin(points),
          end(points),
          [p](const Point& lhs, const Point& rhs){ return dist(p, lhs) < dist(p, rhs); });

编辑
如果您没有C ++ 11访问权限,则需要定义一个仿函数

struct DistanceFunc
{
    DistanceFunc(const Point& _p) : p(_p) {}

    bool operator()(const Point& lhs, const Point& rhs) const
    {
        return dist(p, lhs) < dist(p, rhs);
    }

private:
    Point p;
};

然后您可以用类似的方式进行排序

std::sort(points.begin(), points.end(), DistanceFunc(p));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章