Ich versuche, einen Vektor nach mehreren Spalten zu sortieren. Also ist mein Vektor, wo Zeilen die Anzahl der Zeilen ist. Da ich den Vektor in einer For-Schleife für verschiedene Größen verwende, muss er dynamisch sein.Sortierung Vecor durch mehrere Spalten
vector<vector<double> > matrix;
matrix.resize(rows);
for(size_t i=0; i<rows; i++) {
matrix[i].resize(3);
}
Nachdem der Vektor eingerichtet ist, fülle ich ihn mit Daten. Die Daten bestehen aus Koordinaten (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;
}
Bis jetzt funktioniert alles gut. Aber als nächstes muss ich den Vektor sortieren. Was ich aus meinen Daten weiß, ist die Z-Koordinate ist immer die gleiche, für eine Schleife Passage. Also müsste ich den Vektor zuerst sortieren und dann nach der zweiten Spalte. Ich suche bereits nach Sortierfunktionen wie std: sort, ich konnte nichts passendes finden. Mein Versuch war dies:
int compare(vector<double>& s1, vector<double>& s2)
{
return s1[0] < s2[0];
}
std::sort(matrix.begin(), matrix.end(), compare);
Aber das Ergebnis war das gleiche wie die Eingabe.
So ist die unsortierte Ausgabe sieht wie folgt aus:
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
Was ich will, ist:
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
Der Rückgabetyp Ihrer Vergleichsfunktion sollte 'bool' sein. Aber das sollte nicht verhindern, dass die Sorte funktioniert. Bitte poste MCVE, was kopiert, eingefügt und ausgeführt werden kann. – SergeyA