c++ - 从列表中找到最近的点到一个引用列表

标签 c++ algorithm stl

我有成对的 int 坐标列表,例如

list<pair<int,int> > coordinates;

我需要找到离一个点原点最近的点,

class Point{
public:
float x;
float y;
};

我可以找到自定义比较器对象和排序,但我想知道是否有更快的方法使用 min ?我试过了

class DistanceComparator{
public:
    DistanceComparator(const Point& p){origin=p;}
    inline bool operator<(std::pair<int,int> & lhs,std::pair<int,int > & rhs)
    {
        float deltaX1=lhs.first-origin.x;
        float deltaY1=lhs.second-origin.y;
        float deltaX2=rhs.first-origin.x;
        float deltaY2=rhs.second-origin.y;
        return (deltaX1*deltaX1+deltaY1*deltaY1)<(deltaX2*deltaX2+deltaY2*deltaY2);
    }
private:
    Pointorigin;
};

但是 < 只需要一个参数。如何做到这一点?

最佳答案

您的解决方案不是最优的,因为它需要对整个列表进行排序,而这并不是必需的。您只需要最小的元素,无需对其余元素进行排序。我建议您查看 std::partial_sort 或只是去突击队并遍历它(O(n) 而不是 O(n*log(n )) 排序).

关于c++ - 从列表中找到最近的点到一个引用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197045/

相关文章:

c++ - 插入失败时列表/ map 返回什么?

c++ - STL map 排序

c++ - 调用 clear() 后 vector 的元素仍然可以引用?

c++ - 将 char[] 附加到具有特定长度的 std::string

c++ - 在一个数组中出现K次C++

algorithm - 如何开发一个程序来最大限度地减少手写调查的人工转录错误

python - 乱七八糟的字谜最长的字 python

c++ - 如何在 CUDA 中从稀疏数组表示变为密集数组表示

c++ - 转换 vector 的数据类型

python:找到一组的所有拉丁方(或列数较少的部分方)