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
?
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With