Вы уверены, что ожидаемый результат правильный?Поскольку они не сортируются в квадрантах I, II, III, IV в порядке
x=1;y=1 → I
x=1;y=-1 → IV
x=-1;y=-1 → III
x=-1;y=1 → II
в соответствии с определением квадранта , результат должен быть
x=1;y=1 → I
x=-1;y=1 → II
x=-1;y=-1 → III
x=1;y=-1 → IV
Существуют различные решения для сортировки:
Вот решение от Акшат
bool operator<(Point p1, Point p2)
{
if (p1.getY() == 0 && p1.getX() > 0)
return true; // angle of p1 is 0, thus p2 > p1
if (p2.getY() == 0 && p2.getX() > 0)
return false; // angle of p2 is 0 , thus p1 > p2
if (p1.getY() > 0 && p2.getY() < 0)
return true; // p1 is between 0 and 180, p2 between 180 and 360
if (p1.getY() < 0 && p2.getY() > 0)
return false;
// return true if p1 is clockwise from p2
return p1.getX() * p2.getY() - p1.getY() * p2.getX() > 0;
}
Если предложение Питера Рудермана - то, что вам нужнотогда вы можете использовать std::tie
для функции сравнения
std::sort (ver.begin(), ver.end(), std::tie(a.getX(), a.getY()) < std::tie(b.getX(), b.getY()));