Сортировка вектора переполнения стека координат

Я пытаюсь отсортировать вектор координат. Вектор имеет указатели на эти координаты. Я хочу отсортировать их по х и у. В настоящее время я думаю о том, как это сделать, сделав две копии вектора и затем отсортировав их. Я не уверен в следующих двух вещах:
1) Как сделать копию вектора указателей
2) Как отсортировать обе точки по векторам x и y и убедиться, что они правильно отсортированы следующим образом (1,4), (1,5)

Я читал и пытался выяснить, были ли какие-либо встроенные функции, но я не уверен, если, например, функция сортировки будет правильно отсортировать x и y по порядку.

Вот то, что я имею до сих пор, и любая помощь будет оценена.

typedef struct{double x; double y;) pt;
vector<pt*>v1;
vector<pt*>*v2 = v1;
// allocate memory for the points and push_back on the vector
the vector would have the following points {(1,7),(4,4),(1,3),(-2,4)}

Когда отсортировано по х, это будет
Х = {(- 2,4), (1,3), (1,7), (4,4)} и
Y = {(1,3), (- 2,4), (4,4), (1,7)}


ОБНОВИТЬ:

Я в настоящее время на этом этапе, но он все еще не работает … 🙁

bool compare(pt* m1, pt* m2){return(m1->x <= m2->x) && (m1->y <= m2->y);}

vector<pt*>v1_x = v1;
sort(v1_x.begin(), v1_x.end(), comparer);

-1

Решение

Довольно просто использовать пользовательский компаратор для разыменования, а также для сравнения готовых лексикографических кортежей:

#include <algorithm>
#include <tuple>
#include <vector>

struct pt { double x, double y };

std::vector<pt*> v = /* ... */ ;

auto x = v, y = v;   // copies

std::sort(x.begin(), x.end(),
[](pt * a, pt * b) -> bool
{ return std::tie(a->x, a->y) < std::tie(b->x, b->y); });

std::sort(y.begin(), y.end(),
[](pt * a, pt * b) -> bool
{ return std::tie(a->y, a->x) < std::tie(b->y, b->x); });

Конечно, объекты, на которые указывают указатели, должны жить как минимум до тех пор, пока вы используете указатели в v, x а также y,

2

Другие решения

Других решений пока нет …