sortierter Vector
-
Guten Morgen,
ich habe einen vector, welcher Objekte vom Typ Foo enthält. Jedes Objekt enthält eine member variable vom Typ unsigned int.
std:vector<Foo> m_vFoos; class Foo{ UINT iStart; UINt iDuration; };wenn ich nun ein Objekt hinzufüge, sollen die Objekte nach der größer ihrer "iStart" member variable sortiert werden.
wie mach ich das?
-
Hi,
sowas machen std::set und std::map (wenn man einen "Schlüssel" hat) ganz gut.
Die bekommt man aber nicht so einfach als Array zurückgegeben ... d.h. man muss sich per iterator durchsteppen und nicht per "Zeigerakrobatik".Gruß,
Simon2.
-
1. Du brauchst etwas, um die Foos zu vegleichen, das heißt du implementierst
1a) den operator<, der die entsprechende Membervariable von Foo vergleicht.
1b) einen sog. Comparator, d.h. ein Funktorobjekt, dessen operator() zwei Argumente vom Typ Foo übernimmt und den Vergleich macht.2a) Du packst deine Foos in ein std::set, wo sie automatisch sortiert werden (im Fall 1b musst du den Comparator mit als templateparameter des Set angeben
2b) Du rufst an den nötigen stellen std::sort auf mit negin- und endIterator des vectors. Im Fall 1b muss bei sort wieder der Comparator übergeben werdenhttp://www.cplusplus.com/reference/stl/set/
http://www.cplusplus.com/reference/algorithm/sort.html