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.


Log in to reply