Maximum aus Integer finden.



  • irgendwie komm ich noch nicht ganz drauf...

    Meine Überlegung ist erstmal mir einen vector von meinen player Objekten anzulegen.
    Dann müsste ich allerdings einen funktor erstellen welcher die jeweils zu vergleichende Objekte übergeben bekommt und von diesen dann die Methode getKonto() aufruft. Der Rückgabewert von getKonto muss im Funktor dann verglichen werden und als parameter an meinen "max_element" algo. zurückgegeben werden.

    falls mein niedergetextetes Wirrwarr im Kopf für irgendjemand verständlich ist:
    Ist dies von der Theorie her richtig / möglich und kann mir jemand bei dem funktor helfen ? 🙂
    danke ! LG



  • Ja, wenn ich dich richtig verstehe, ist das richtig 😃 Du brauchst allerdings nicht unbedingt einen Funktor (also ein Objekt einer Klasse, für die der Funktionsaufruf-Operator überladen ist), sondern in deinem Fall sollte es auch eine einfache Funktion tun, also sowas wie

    bool ComparePlayersByKonto(Player const &lhs, Player const &rhs)
    {
        return lhs.getKonto() < rhs.getKonto();
    }
    

    Felix



  • vieeeeelen dank an alle : )
    ganz besonders dem felix 😃

    habs jetz erstmal soweit dass es wenigstens funktioniert:

    bool compareKonto(player *lhs, player *rhs)
    {
      return lhs->getKonto() < rhs->getKonto();
    }
    
    void gamehandler::run()
    {
      vector<player*> playerVec;
    
      playerVec.push_back(&Red);
      playerVec.push_back(&Purple);
      playerVec.push_back(&Blue);
      playerVec.push_back(&Yellow);
    
      vector<player*>::const_iterator max = max_element(playerVec.begin(), playerVec.end(), compareKonto);
      cout << *max->getKonto() << endl;  //funktioniert nicht
      playerVec.push_back(*max);
      cout << playerVec[4]->getKonto() << endl;  //funktioniert
    }
    

    Der iterator max ist doch ein Zeiger der mir nun auf das Maximum zeigt. Warum kann ich nicht wie oben versucht direkt mithilfe des iterators getKonto aufrufen ?
    Speichere ich das Objekt auf welches der Iterator zeigt zuerst wieder in den Vector und geben dann erst den Kontostand aus funktioniert es. *verständnisproblem*



  • cout << (*max)->getKonto() << endl;
    


  • simon.gysi schrieb:

    cout << (*max)->getKonto() << endl;
    

    Was mich gerade wieder daran erinnert das ich ziemlich froh bin das sowas nicht geht:

    cout << max->->getKonto() << endl;
    

    oder nur

    cout << max-->getKonto() << endl;
    

    Ich glaube dann wäre ich noch früher fällig für die Rente. 😉



  • Fellhuhn schrieb:

    simon.gysi schrieb:

    cout << (*max)->getKonto() << endl;
    

    Was mich gerade wieder daran erinnert das ich ziemlich froh bin das sowas nicht geht:

    cout << max->->getKonto() << endl;
    

    oder nur

    cout << max-->getKonto() << endl;
    

    Ich glaube dann wäre ich noch früher fällig für die Rente. 😉

    Das hier wäre aber ohne Probleme möglich gewesen. 🙂

    cout << max->getKonto() << endl;
    

    Obwohl das hier:

    max-->getKonto()
    

    Auch ohne weiters möglich ist. :p

    int getKonto ()
    {
        return 2;
    }
    ...
    int max = 5;
    cout << (max-->getKonto()) << endl;
    

    Was gibt das wohl aus? 😃



  • Nichts, da boolsche Werte per Default nicht ausgegeben werden. 😉



  • drakon schrieb:

    Das hier wäre aber ohne Probleme möglich gewesen. 🙂

    cout << max->getKonto() << endl;
    

    hm in meinem fall leider nicht ^^

    Danke allen, funktioniert nun endlich.
    Wie kompliziert manche scheinbar so trivialen Dinge sein können, wobei sich die Lösung sobald man sie gefunden hat doch wieder als relativ primitiv herausstellt 😃



  • sust schrieb:

    Wie kompliziert manche scheinbar so trivialen Dinge sein können, wobei sich die Lösung sobald man sie gefunden hat doch wieder als relativ primitiv herausstellt 😃

    Einen Kaffee auf chinesisch zu bestellen ist auch nur nicht trivial, wenn man kein Chinesisch kann. 😉



  • aber ich kanns ja.. "eigentlich" 😞



  • Wenn es beim Nachbestellen der Sahne hapert, weil man es noch nie brauchte, schlägt man halt nach wie es heißt (oder fragt eben hier). 😉


Anmelden zum Antworten