假設我有一個std::vector<Point>
其中Point
是struct Point { double x; double y;}
我想這樣的載體分成組(存儲桶),其中在同一個桶中的所有點具有彼此之間相同歐幾里得範數(例如dist(PointA,PointB)== X,其中X是常數)。我已經決定使用std::map
這樣的任務自定義排序操作:分區的std :: 2D的矢量指向
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<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