Vektor aus Structs sortieren ?? please help???????
-
brauch dringend hilfe wie sortier ich auf die schnelle den vector aus structs nach blub??
hab mir da was vorgestellt aus ?? das müsste doch in wenigen Zeilen gehen????
#include <algorithm>
#include <functional>struct FOO {
int blub;
int bla;
};
vector <FOO> m_foo;big thx
-
std::sort, kannst ja deinen eigenen Funktor für den Vergleich übergeben, wenn es keinen Sinn macht einen eigenen operator< für die Klasse anzulegen.
btw.
uff, ich mag keine großgeschriebenen Klassen/Strukturnamen
-
mm ich kenn mich da nicht so gut aus kann mir da jemand bei der implementierung schnell mal helfen?
-
Hallo,
#include <iostream> #include <algorithm> #include <vector> using namespace std; struct FOO { int blub; int bla; }; void ausgabe(vector<FOO>& obj) { for(vector<FOO>::iterator it = obj.begin(); it != obj.end() ;it++) { cout << it->blub << endl; // cout << it->bla << endl; } cout << "______________" << endl; } bool cmp(const FOO& a, const FOO& b) { return a.blub > b.blub; } int main() { vector<FOO> vec_foo; FOO foo; foo.blub = 120; vec_foo.push_back(foo); foo.blub = 20; vec_foo.push_back(foo); foo.blub = 30; vec_foo.push_back(foo); foo.blub = 880; vec_foo.push_back(foo); // Unsortierte Ausgabe... ausgabe(vec_foo); sort(vec_foo.begin(), vec_foo.end(), cmp); // Sortierte Ausgabe... ausgabe(vec_foo); }
Das sollte dir eigentlich helfen.
-
schaut das mit klassen irgendwie anderst aus bei mir kommt kompilerfehler??
bool Bla::Cmp(){
foo.distance > foo.distance; -> ist kein Element von Vektor??
};sort(foo.begin(), foo.end(), Cmp);
-
Also bei CarstenJ ist cmp keine Methode von FOO !
d.h. Cmp darf auch keine Methode von Bla sein!
->
bool Cmp(const Bla& lhs, const Bla& rhs); class Bla { friend bool Cmp(const Bla& lhs, const Bla& rhs); public: //... } bool Cmp(const Bla& lhs, const Bla& rhs) { return (lhs.distance < rhs.distance); }
-
?? jo also der vector ist bei mir private und sollte auch so bleiben? irgendwie ist das alles komisch ??
hab eine klasse
struct bla{ int m; int n; } class Foo{ private: vecttor<bla> blub; public: --> hier sollt sortierern rein }; also Foo:Sort() { irgendwie implementen dass es funzt }
-
Nabend,
ich weiss ja nicht, nach was du sortieren willst, aber so koenntest du es bspw.
machen:struct BlaCmp { bool operator()(const bla& x, const bla& y) { return (x.m < y.m) && (x.n < y.n); } }; class Foo { private: std::vector<bla> blub; public: void sort() { BlaCmp bc; std::sort(blub.begin(), blub.end(), bc); } };
mfg
v R
-
Hallo,
Downset schrieb:
?? jo also der vector ist bei mir private und sollte auch so bleiben? irgendwie ist das alles komisch ??
hab eine klasse
struct bla{ int m; int n; } class Foo{ private: vecttor<bla> blub; public: --> hier sollt sortierern rein }; also Foo:Sort() { irgendwie implementen dass es funzt }
Dann musst du das auch so sagen. Dein Ursprungspost sieht anders aus, da ist von Klassen nicht ansatzweise die Rede.