gpt4 book ai didi

c++ - 如何按距点(x1,y1)的距离按升序对坐标集进行排序?

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:05 26 4
gpt4 key购买 nike

我有std::set<std::pair<float,float>>它代表 map 上的点(2d、x 和 y 值),我有一个点的值为 x1 和 y1。如何按距点 (x1,y1) 的距离升序排列集合?

最佳答案

std::set是一个有序的容器,并且在插入时发生排序,这取决于可以用第二个模板参数指定的排序标准。因此,将 set 与根据到引用点的距离返回 true 或 false 的谓词一起使用。

struct DistanceCompare
{
DistanceCompare(const std::pair<float,float>& point) : point_(point) {}
bool operator()(const std::pair<float,float>& lhs,
const std::pair<float,float>& rhs) const
{
return distance2(lhs) < distance2(rhs);
};

private:
float distance2(const std::pair<float,float>& point) const
{
// calculate distance squared between point and point_
const float x = point.first - point_.first;
const float y = point.second - point_.second;
return x*x + y*y;

}
std::pair<float, float> point_;
};

....
std::pair<float,float> refPoint = ....;
DistanceCompare comp(refPoint);
std::set<std::pair<float, float>, DistanceCompare> pointSet(comp);

比较距离的平方就足够了,从而避免调用 std::sqrt

关于c++ - 如何按距点(x1,y1)的距离按升序对坐标集进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12456153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com