Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

find element with max value from std::map [duplicate]

Tags:

c++

std

stdmap

I'm trying to get the element with max value from std::map,

int main() {
    map<int, int> m;
    m[1] = 100;
    m[2] = -1;

    auto x = std::max_element(m.begin(), m.end(), m.value_comp());

    cout << x->first << " : " << x->second << endl;
}

why it prints the second element 2 : -1 ?

like image 284
aj3423 Avatar asked Jun 03 '15 05:06

aj3423


2 Answers

Taken from here:

auto x = std::max_element(m.begin(), m.end(),
    [](const pair<int, int>& p1, const pair<int, int>& p2) {
        return p1.second < p2.second; });

This, rather than using std::map::value_comp() (which compares the key values) looks at the second member in the pair, which contains the value. This uses a lambda expression, so you will have to compile with C++11 support

like image 147
Levi Avatar answered Oct 06 '22 01:10

Levi


http://www.cplusplus.com/reference/map/map/value_comp/

Returns a comparison object that can be used to compare two elements to get whether
the key of the first one goes before the second.

and 2 > 1. value_comp compares the key values, not the value values. Because that's how C++ rolls.

like image 22
kfsone Avatar answered Oct 06 '22 01:10

kfsone