加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c根据到外部点的距离对矢量进行排序

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

解决方法

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

Point p

还假设点被定义为

std::vector<Point> points;

并且你有一些函数dist,它取2点并返回距离(例如欧几里德距离)

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

然后你可以使用带有lambda函数的std::sort

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,rhs);
    }

private:
    Point p;
};

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读