我想知道是否存在一种基于某些外部值对向量进行排序的好方法。例如,我有一个向量,其中k个最近的邻居到一个点。我想根据它们到查询点的距离对向量进行排序。查询点不包括在结果中,并且std :: sort允许您为向量中的两个元素(而不是每个元素与固定点)定义比较函数。是否有任何预先构建的方法可以执行这种排序?还是我需要构建自己的自定义排序算法?谢谢
如果您有一些班级Point
,而您想针对的要点是
Point p
还假设points
定义为
std::vector<Point> points;
并且您有一些函数dist
需要2Point
并返回距离(例如,欧几里得距离),例如
double dist(const Point& lhs, const Point& rhs)
{
// compute Euclidean distance or whatever
}
然后您可以使用std::sort
lambda函数
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] 删除。
我来说两句