vector <eigene Klasse> mit find durchsuchen
-
#include <iostream> #include <vector> #include <algorithm> using namespace std; class person { private: int pnr; string name; public: person(int nr,string nachname):pnr(nr),name(nachname){} person(){} int get_pnr() { return pnr; } string get_name() { return name; } bool is_persnr(int nr) { return pnr==nr; } }; int _main() { vector <person> leute; leute.push_back(person(1,"Arne")); leute.push_back(person(2,"Fred")); //Das funktioniert natürlich nicht vector <person>::iterator it=find(leute.begin(),leute.end(),person::is_persnr(2)); return 0; }Hallo,
habe einen vector mit meiner eigenen Klasse.
Nun möchte ich diesen vector nach z.B wie hier der pnr durchsuchen.
Bekomme ich das mit find hin, oder muss ich durch den vecor iterieren und dann
"von Hand" vergleichen ?
-
Mach in
personeinen Vergleichsoperator mitintund übergib als dritter Parameter beistd::findden gewünschten Wert (in diesem Fall zwei).
-
Hallo,
das Stichwort dafür lautet: Funktor
s. z.B. http://www.c-plusplus.net/forum/277536Wenn du schon einen neueren Compiler hast, dann könntest du auch Lambda-Expressions verwenden, so in der Art
find(leute.begin(),leute.end(), [](p){ return p.is_persnr(2); });
-
Ich würde es etwa so machen:
class Person { private: int ID; public: explicit Person(int ID) { this->ID = ID; } bool operator== (const Person& Obj) const { return this->ID == Obj.ID; } }; typedef std::vector<Person> Container; Container MeinVector; //Vector füllen Container::iterator PersonNo2 = std::find(MeinVector.begin(), MeinVector.end(), Person(2));
-
Th69 schrieb:
find(leute.begin(),leute.end(), [](p){ return p.is_persnr(2); });Fast richtig. Das Template hierfür heißt
find_if.
-
Danke.

"Funktor" das wars.