次のようなint座標のペアのリストがあります
list<pair<int,int> > coordinates;
1 つのポイント原点に最も近いポイントを見つける必要があります。
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;
};
しかし、 < は引数を 1 つだけ取る必要があります。これを行う方法 ?