Предположим, у меня есть std::vector<Point>
где Point
является struct Point { double x; double y;}
Я хотел бы разделить такой вектор на группы (ведра), где все пункты в одном ведре имеют такую же евклидову норму между собой (например dist (PointA, PointB) == X, где X является константой). Я решил использовать std::map
для такой задачи с оператором пользовательских сортировки:Partition станд :: вектор 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