web-dev-qa-db-ja.com

std :: mapから最大値を持つ要素を見つける

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;
}

なぜ2番目の要素を出力するのか2 : -1

14
aj3423

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; });
_

これは、std::map::value_comp()(キー値を比較する)を使用するのではなく、値を含むペアのsecondメンバーを調べます。これはラムダ式を使用するため、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.

および2> 1。value_compは、値の値ではなく、key値を比較します。それがC++のロール方法だからです。

2
kfsone