Instanzen nach maximum durchsuchen



  • N Abend!

    In einem vector speichere ich die Klasse film ..

    In der cpp-Datei habe ich global definert

    namespace{
    	int maxSize;
    }
    

    und in der cpp.h

    private:
    	int Size;
    

    und speichere die Filme in

    vector<film> Bibliothek;
    

    Ist es möglich Klasse film mit einer Methode o. ä. auszustatten die alle Filme durchsucht und den größten Wert für "Size" in "maxSize" speichert?

    Für sort habe ich bereits

    bool operator<(const film& Spieldauer) const {return Spieldauer<rhs.Spieldauer;}
    

    definiert.

    Danke schon mal!!
    Klassenkasper



  • http://en.cppreference.com/w/cpp/algorithm/min_element

    Also einfach

    maxSize = std::min_element(Bibliothek.begin(), Bibliothek.end());
    

    Dein definierter operator< wird dann automatisch benutzt (es sollte aber wohl

    bool operator<(const film& lhs) const { return lhs.Size < Size; }
    

    heißen?).



  • @Incocnito: Er hat den operator< als Member-Funktion definiert, stimmt also schon. Deiner hingegen ist nicht korrekt, da globale Funktionen keine cv-/ref-Qualifier haben dürfen im Gegensatz zu Member-Funktionen. Zudem wolltest du wohl std::max_element nutzen, nicht std::min_element . 😉 Ferner geben diese Funktionen lediglich einen Iterator zurück; die Konvertierung nach int wird wahrscheinlich nicht funktionieren.

    LG



  • Incocnito schrieb:

    ... (es sollte aber wohl

    bool operator<(const film& lhs) const { return lhs.Size < Size; }
    

    heißen?).

    Ne. Size ist die Dateigröße und Spieldauer eben die Spieldauer.
    Ich hab eigentlich mehrere dieser Werte die ich global speichere (Auszeichnungen, Bewertung etc).



  • Klassenkasper schrieb:

    Ne. Size ist die Dateigröße und Spieldauer eben die Spieldauer.

    Und genau die brauchst du um den Film mit der höchsten Spieldauer zu ermitteln.

    Ich hab eigentlich mehrere dieser Werte die ich global speichere (Auszeichnungen, Bewertung etc).

    Die sind nicht global. Die sind in einem Namespace. Und du sollst globale Variablen auch eigentlich vermeiden. Mach Methoden für die Auszeichnungen usw. dann baust du dir aus diesen Dingern eben auch ein Objekt insofern du das benötigst. Mit diesen Methoden gibst du dann jeweils immer ein frisch berechnetes Objekt zurück, das dir den aktuellen Stand representiert.



  • wörtner schrieb:

    Und genau die brauchst du um den Film mit der höchsten Spieldauer zu ermitteln.

    Ne, Size und Spieldauer sind bereits korrekt in allen Instanzen hinterlegt.
    (Der Film mit der längsten Spieldauer muss nicht zwangsläufig den meisten Specherplatz belegen.)

    wörtner schrieb:

    Die sind nicht global. Die sind in einem Namespace. Und du sollst globale Variablen auch eigentlich vermeiden. Mach Methoden für die Auszeichnungen usw. dann baust du dir aus diesen Dingern eben auch ein Objekt insofern du das benötigst.

    Stimmt, war falsch ausgedrückt:
    meine Klasse Film enthält private Variablen für Auszeichnungen, Bewertung etc. und Methoden für den Zugriff.
    Aber auch im nameless namespace maxAuszeichnung, maxBewertung und eben auch maxSize die ich speichern möchte.

    Danke!


Log in to reply