c ++根据与外部Point的距离对Vector进行排序

arm*_*rhu 3 c++ sorting

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

Cor*_*mer 6

如果你有一些类Point,你想要排序的点是

Point p
Run Code Online (Sandbox Code Playgroud)

还假设points定义为

std::vector<Point> points;
Run Code Online (Sandbox Code Playgroud)

并且你有一些功能dist需要2 Point并返回距离(例如欧几里德距离)

double dist(const Point& lhs, const Point& rhs)
{
    // compute Euclidean distance or whatever
}
Run Code Online (Sandbox Code Playgroud)

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

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

编辑
如果您没有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;
};
Run Code Online (Sandbox Code Playgroud)

然后你可以用类似的方式排序

std::sort(points.begin(), points.end(), DistanceFunc(p));
Run Code Online (Sandbox Code Playgroud)