mir eine Lösung für folgendes Problem bin auf der Suche:Wie zu sortieren, gegen den Uhrzeigersinn alle Punkte eines Vektors in mit n elments
ich dies von Vektoren mit Art zu lösen geplant, aber es ist keine Lösung für all meinen Fall .
Ich schreibe vor this post about, wie Vektor Punkte mit (x, y, z) zu sortieren.
Ich werde hier erklären, was das Problem ist.
Ich habe diesen Vektor:
Point [0] = [X: 3.00;Y: 0.00;Z: 0.00]
Point [1] = [X: 3.00;Y: 0.00;Z: 3.00]
Point [2] = [X: 3.00;Y: 5.00;Z: 0.00]
Point [3] = [X: 3.00;Y: 5.00;Z: 3.00]
Point [4] = [X: 0.00;Y: 5.00;Z: 0.00]
Point [5] = [X: 0.00;Y: 5.00;Z: 3.00]
Point [6] = [X: 0.00;Y: 0.00;Z: 0.00]
Point [7] = [X: 0.00;Y: 0.00;Z: 3.00]
Erste Schritt Sortierung z: Dann
std::sort(std::begin(vector_points), std::end(vector_points),
[](auto const& a, auto const& b) {return (a.z < b.z); });
Point [0] = [X: 3.00;Y: 0.00;Z: 0.00]
Point [1] = [X: 3.00;Y: 5.00;Z: 0.00]
Point [2] = [X: 0.00;Y: 5.00;Z: 0.00]
Point [3] = [X: 0.00;Y: 0.00;Z: 0.00]
Point [4] = [X: 3.00;Y: 0.00;Z: 3.00]
Point [5] = [X: 3.00;Y: 5.00;Z: 3.00]
Point [6] = [X: 0.00;Y: 5.00;Z: 3.00]
Point [7] = [X: 0.00;Y: 0.00;Z: 3.00]
Zweite Schritt Sortierung y: Dann
auto yComp = [](const auto& p1, const auto& p2){return p1.y < p2.y;};
std::sort(vector_points.begin(), vector_points.begin() + 4, yComp);
std::sort(vector_points.begin() + 4, vector_points.begin() + 8, yComp);
Point [0] = [X: 3.00;Y: 0.00;Z: 0.00]
Point [1] = [X: 0.00;Y: 0.00;Z: 0.00]
Point [2] = [X: 3.00;Y: 5.00;Z: 0.00]
Point [3] = [X: 0.00;Y: 5.00;Z: 0.00]
Point [4] = [X: 3.00;Y: 0.00;Z: 3.00]
Point [5] = [X: 0.00;Y: 0.00;Z: 3.00]
Point [6] = [X: 3.00;Y: 5.00;Z: 3.00]
Point [7] = [X: 0.00;Y: 5.00;Z: 3.00]
Dritter Schritt Sortierung x: Dann
std::sort(vector_points.begin(), vector_points.begin() + 2, xComp);
std::sort(vector_points.begin() + 2, vector_points.begin() + 4, xComp);
std::sort(vector_points.begin() + 4, vector_points.begin() + 6, xComp);
std::sort(vector_points.begin() + 6, vector_points.begin() + 8, xComp);
Point [0] = [X: 0.00;Y: 0.00;Z: 0.00]
Point [1] = [X: 3.00;Y: 0.00;Z: 0.00]
Point [2] = [X: 0.00;Y: 5.00;Z: 0.00]
Point [3] = [X: 3.00;Y: 5.00;Z: 0.00]
Point [4] = [X: 0.00;Y: 0.00;Z: 3.00]
Point [5] = [X: 3.00;Y: 0.00;Z: 3.00]
Point [6] = [X: 0.00;Y: 5.00;Z: 3.00]
Point [7] = [X: 3.00;Y: 5.00;Z: 3.00]
I einen Vektor mit der ersten Hälfte der sortierten Punkte in Gegenuhrzeigerrichtung möchte.
Würde jemand mir helfen?
Ihre tripple Sortierung Sortierung nicht richtig, weil 'std :: sort' ist nicht [ stabil] (https://en.wikipedia.org/wiki/Sorting_algorithm#Stability). Sie müssten stattdessen 'std :: stable_sort' verwenden. Ein besserer Weg wäre jedoch, die Vergleichsfunktion zu 'return std :: tie (a.x, a.y, a.z)
nwp