Я пытаюсь сортировать вектор по нескольким столбцам. Таким образом, мой вектор, где строки - это количество строк. Поскольку я использую вектор в for-loop для разных размеров, он должен быть динамически.Сортировка Vecor несколькими столбцами
vector<vector<double> > matrix;
matrix.resize(rows);
for(size_t i=0; i<rows; i++) {
matrix[i].resize(3);
}
После того, как вектор установлен, я заполняю его данными. Данные состоят из координат (xyz).
for(size_t i = 0;i<lss.size();i+2) {
int k = i+1;
matrix[i][0]=lss[i].v[0].x;
matrix[i][1]=lss[i].v[0].y;
matrix[i][2]=lss[i].v[0].z;
matrix[k][0]=lss[i].v[1].x;
matrix[k][1]=lss[i].v[1].y;
matrix[k][2]lss[i].v[1].z;
}
До сих пор все работает нормально. Но потом мне нужно отсортировать вектор. Из моих данных я знаю, что координата z всегда одна и та же, для одного прохода в цикле. Поэтому мне пришлось бы отсортировать вектор первым, а не вторым столбцом. Я уже ищу функции сортировки, такие как std: sort, я не мог найти что-то подходящее. Я стараюсь:
int compare(vector<double>& s1, vector<double>& s2)
{
return s1[0] < s2[0];
}
std::sort(matrix.begin(), matrix.end(), compare);
Но результат был таким же, как и вход.
Так несортированный результат выглядит следующим образом:
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
Что я хочу:
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
Тип возврата вашей функции сравнения должен быть 'bool'. Но это не должно препятствовать работе. Пожалуйста, напишите MCVE, который можно скопировать, скомпилировать и запустить. – SergeyA