Wie find_if richtig aufrufen.
-
Ich habe eine Klasse Use_:
class Use_ { private: unsigned int useid_; std::string loginName_; std::string password_; public: // Default Konstruktor // Get und Set Methoden und folgenden operator bool operator()(char* user, char* pass) { return loginName_ == user && password_ == pass; } };
Ich habe eine Anwendung mit einem Dialog. Der user soll sich einloggen. Dazu habe ich eine Funktion in der ich die find_if Funktion benutzen will.
bool Find(HWND hwnd, std::vector<Use_>& userAcc) { // ... // speichere die Eingabe von den editbox in zwei char* variablen(user, pass) const std::vector<Use_>::iterator beg = userAcc.begin(); const std::vector<Use_>::iterator end = userAcc.end(); std::vector<Use_>::iterator iter; iter = std::find_if(beg, end, iter -> operator ()(user, pass)); }
Allerdings ist der Aufruf falsch deshalb bricht der Compiler die Kompilierung mit der Fehlermeldung "term does not evaluate to a function taking 1 arguments" ab. Deshalb meine Frage: Wie benutze ich in meiner Situation die find_if Funktion?
-
Am besten erstellst du dir ein eigenes Predicate function object, das die Attribute vergleicht.
struct UserComparator { std::string Pass_; std::string Name_; UserComparator( const std::string& U, const std::string& P ) : Pass_( P ), Name_( N ) { } bool operator()( const Use_& op ) const { return op.loginName_ == Name_ && op.password_ == Pass_; } }; bool Find(HWND hwnd, std::vector<Use_>& userAcc) { // ... // speichere die Eingabe von den editbox in zwei char* variablen(user, pass) vector<Use_>::const_iterator = std::find_if( userAcc.begin(), userAcc.end(), UseComparator( user, pass ) ); }
-
Danke fuer eure Antworten. Da ich mich nicht viel mit der stl auseinandergesetzt habe bin ich nicht auf map gekommen. Werde map und multimap genauer ansehen.