У меня есть std::vector
структур для хранения значений x0
и y0
. Я хотел бы иметь возможность сортировать векторные элементы, упорядочивая их, начиная с точек с более низкими значениями x0
и y0
. В настоящее время я могу только отсортировать их, рассматривая только значения x0
или y0
.
struct Coordinate
{
double x0 = 0.0;
double x1 = 0.0;
Coordinate(double paramx0, double paramy0) : x0(paramx0), y0(paramy0) {}
};
std::vector<Coordinate> coords;
std::vector<Coordinate> coords_x;
std::vector<Coordinate> coords_y;
bool compareByLength_x(const Coordinate &a, const Coordinate &b)
{
return a.x0 < b.x0;
}
bool compareByLength_y(const Coordinate &a, const Coordinate &b)
{
return a.y0 < b.y0;
}
// ... storing values in the vector and then sort it..
std::sort(coords.begin(), coords.end(), compareByLength_x);
for (unsigned int i = 0; i < coords.size(); ++i)
{
cout << i << " X[0]: " << coords[i].x0 << " Y[0]: " << coords[i].y0 << endl;
}
cout << "\n" << endl;
parallel_y(coords.size(), coords);
cout << "\n" <<endl;
std::sort(coords.begin(), coords.end(), compareByLength_y);
for (unsigned int i = 0; i < coords.size(); ++i)
{
cout << i << " X[0]: " << coords[i].x0 << " Y[0]: " << coords[i].y0 << endl;
}
cout << "\n" << endl;
parallel_x(coords.size(), coords);
cout << "\n" <<endl;
Например, если вектор содержит:
125, 140
125, 32
125, 196
164, 38
10, 38
тогда оно должно стать:
10, 38
125, 32
125, 140
125, 196
164, 38
, сначала проверяя самое низкое значение x0
, а затем, для тех же значений x0
, ища самые низкие значения y0
.
Как я могу это реализовать? Могу ли я использовать одну функцию?