Выходные данные должны быть:
1 1 1 1
1 2 6 1
2 2 for x 1 2 for y
3 4 2 2
6 1 3 4
Таким образом, вы хотите отсортировать объекты по y или x .Один простой способ сделать это - определить operator<
для вашего класса punto
bool operator<(const punto& obj)
{
return this->y < obj.y; // this will help you to sort w.r.t Y
}
Теперь вы можете просто использовать std::sort()
, как обычно.
std::sort(list.begin(), list.end());
Чтобы отсортировать по x с, вы можете написать lambda
функцию, которая будет использовать геттеры (которые вам нужно определить в классе punto
) вашего класса.
// define getters to access the private memebers
const int& getX()const { return x; }
const int& getY()const { return y; }
Тогда вы можете сделать следующее:
// to sort w.r.t Xs: std::sort() with lambda
std::sort(list.begin(), list.end(),[](const punto& lhs, const punto& rhs)->bool
{ return lhs.getX() < rhs.getX(); });
СМОТРИТЕ ВЫХОД ЗДЕСЬ
Однако я не понял, почему вы создалиpunto *p1;
и каждый раз, когда у вас есть push_back
содержимое для вектора.
Еще одна опасная вещь - заметить, что все, что вы создали с помощью ключевого слова new
, не было удалено после, что является серьезной утечкой памяти в вашей проблеме.
Вы также можете просто использовать punto p1;
или Умные указатели , если вы действительно хотите играть с динамической памятью.