C++ std::vector sortieren

thuering

Lt. Commander
Registriert
Nov. 2020
Beiträge
1.222
Moin!
Ich habe in einem kleinen Spiel einen std::vector gefüllt mit Objekten. In den Objekten gibt es eine Membervariable
C++:
float distance
Ich möchte den Vektor umsortieren, so dass das Objekt mit der kleinsten float distance am Anfang des Vectors steht.
Wie mache ich das am elegantesten?
 
Lösung
Du könntest std::sort in Verbindung mit einer Lambda-Funktion verwenden:
std::sort(vec.begin(), vec.end(), [](const MeinObjekt& a, const MeinObjekt& b) { return a.distance < b.distance; });
wobei vec dein std::vector ist und MeinObjekt die Klasse mit dem Member distance ist.
Du könntest std::sort in Verbindung mit einer Lambda-Funktion verwenden:
std::sort(vec.begin(), vec.end(), [](const MeinObjekt& a, const MeinObjekt& b) { return a.distance < b.distance; });
wobei vec dein std::vector ist und MeinObjekt die Klasse mit dem Member distance ist.
 
  • Gefällt mir
Reaktionen: Schwachkopp, thuering, tollertyp und eine weitere Person
Uff, das funktioniert ja tatsächlich! 😱
Diese hochkomplizierten "Lambda-Funktionen" muss ich mir nochmal genauer anschauen.
Vielen Dank!
 
Alternativ sollte das auch mit ranges gehen:
C++:
#include <algorithm>
#include <functional>
[...]
std::ranges::sort(vec, std::less{}, &MeinObjekt::distance);

Das MeinObjekt ist wieder die Klasse mit dem member distance. Ich habe das Wording mal beibehalten, auch wenn das eine recht unglückliche Wortwahl ist.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Schwachkopp
Zurück
Oben