max_element auf Schlüssel/Werte von map anwenden



  • Hallo,

    gibt es eine Möglichkeit, max_element (aus der STL) auf die Schlüssel oder Werte einer map anzuwenden?



  • Die Klasse map selbst ist nach Schlüsseln sortiert, also brauchst Du hier nur das letzte Element heranzuziehen, wenn Du das Maximum nach Schlüssel suchst.

    Für die Werte kannst Du max_element mit einem Prädikat benutzen:

    typedef std::map< ... > mymap_t;
    
    struct less_value
    {
        bool operator()( mymap_t::value_type const& l, mymap_t::value_type const& r )
        {
            return l.second < r.second; // second ist der Wert eines Map-Elementpaars
        }
    };
    
    mymap_t mymap;
    max_element( mymap.begin(), mymap.end(), less_value() );
    

    EDIT:
    Grundsätzlich lässt sich die Funktion max_element (durch Ersetzen von second durch first im Prädikat) auch auf die Schlüssel anwenden. Das ist aus performancetechnischer Sicht aber Unsinn, da die Map wie gesagt bereits sortiert ist.

    EDIT2:
    Und das Prädikat sollte vielleicht auch less_value (vorher less_key) heissen, wenn es sich auf Werte bezieht 😃


Log in to reply