web-dev-qa-db-fra.com

trouver un élément avec une valeur max de std :: map

J'essaye d'obtenir l'élément avec la valeur max de 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;
}

pourquoi il imprime le deuxième élément 2 : -1?

14
aj3423

Extrait de ici :

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

Au lieu d'utiliser std::map::value_comp() (qui compare les valeurs de clé), ceci examine le membre second de la paire, qui contient la valeur. Cela utilise une expression lambda, vous devrez donc compiler avec le support C++ 11

18
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.

et 2> 1. value_comp compare les valeurs de la clé , pas les valeurs de valeur. Parce que c'est comme ça que C++ roule.

2
kfsone