Я пытаюсь сортировать вектор указателей на класс A, используя std :: sort, но у меня есть некоторые трудности.Сортировка вектора указателей по двум параметрам
Представьте себе, что существа класса A представляют собой точку, содержащую координаты x и y. Я хочу отсортировать вектор по координатам y от самого большого до самого низкого, используя некоторое фиксированное значение смещения. И, кроме того, я хочу сортировать его по координате x, от самого низкого до самого большого. У меня было что-то вроде в виду следующее, но, как вы можете себе представить, он не работает, как хотелось:
bool A::sortByCoordinates(const A *a, const A *b)
{
if ((b->y < a->y - offset) || (b->y > a->y + offset)) {
return false;
} else if (b->x < a->x) {
return true;
}
return false;
}
void A::recalculate(std::vector<A *> &test)
{
std::sort(test.begin(), test.end(), sortByCoordinates);
}
Короче говоря, если b->y < a->y - offset
или b->y > a->y + offset
лечить его как b->y == a->y
, а затем сортировать по их координаты х от самого низкого до самой большой. Если приведенное выше значение неверно, введите b->y < a->y
.
Как я могу это достичь?
РЕДАКТИРОВАТЬ:
Представьте плоскости ху, такие как это:
, где черные точки представляют собой класс А с координатами х и у. Я хочу разбить эту плоскость на конечное число секций, которые представлены красными линиями и широкими, как offset
. Теперь я хочу рассматривать точки в этих разделах, поскольку они имеют одну и ту же координату y и сортируют их только по их координате x.
x, y и смещение - целые числа. Может ли ваш код быть упрощенным, зная это? – user1806687
@ user1806687, см. Править, но будьте осторожны, поскольку 'operator /' for 'int' имеет странное поведение вокруг нуля, поэтому вам, скорее всего, придется добавить отдельный 'if' для отрицательных (или положительных) чисел. – Petr
Не беспокойтесь, все они всегда положительные и больше 0. Я попробую ваш код позже. – user1806687