が同じバケット内のすべての点が(相互に同一のユークリッドノルムを有する場合、私はPoint
がstruct Point { double x; double y;}
あるIがグループ(バケット)にそのようなベクターを分割したいstd::vector<Point>
があるとポイントdist(PointA、PointB)== X、ここでXは定数)。パーティションのstd ::ベクトルは、
struct ClosePoints
{
bool operator()(Point const& A, Point const& B) const
{
bool same = dist(A,B) < x;
//If not close enough use lexical sort
return same ? false : std::tie(A.x, A.y) < std::tie(B.x,);
}
}
パーティショニングコード:私は、カスタムのソート演算子で、このようなタスクのためstd::map
を使うことにしましたいくつかのテストの後
std::map<Point, std::list<Point>, ClosePoints> map;
for(const auto& p : pointsVector)
map[p].push_back(p);
と私はいくつかのポイントが与えられ従うことに気付きましたバケツを印刷しますユークリッドのノルム限界X
は異なるバケットで終了しました。 私はそれがなぜそうであるか把握できないのですか?
問題を再現できるテスト入力を含め、完全でコンパイル可能で実用的な例を提供することをお勧めします。 – vordhosbn
1) 'x'とは何ですか? 2) 'dist()'とは何ですか? 3) 'dist(A、B)
PaulMcKenzie
あなたは演算子が 'A <= A + eps'と' A + eps <= A + 2 * eps'という厳密な順序に従わず、 'A <= A + 2 * eps'ではありません。 – Jarod42