2017-03-17 10 views
0

私は多くを検索しましたが、私が望む答えは見つけられませんでした。キーと値に基づいたC++マップのカスタム比較メソッド

キーと値に基づいてC++マップをソートする必要があります。この方法のように 何か:

bool mycomp(mii::iterator a, mii::iterator b) { 
    if (a->second > b->second) 
     return true; 
    else if (a->second < b->second) 
     return false; 
    else 
     return a->first > a->second; 
} 

、それにメートルであることを

sort(m.begin() , m.end(), mycomp); 

のようなものを使用します。

map<int,int> m; 

私はそのようなことを行うことができますか?はいの場合は、正しい構文でなければなりません。

+0

マップはシーケンスではないのでマップをソートすることはできません。 –

+0

@KerrekSBこれは間違っています。 '' '' std :: map''''の内容はデフォルトで '' '' '' std :: less '' ''でソートされますが、カスタムコンパイラを提供することができます。 – mascoj

答えて

0

std::mapを定義するときは、Compare関数をテンプレートパラメータとして指定できます。詳細はthe referenceを参照してください。

しかし、これはキーの並べ替えだけのためだと思います。 Key-Valueソートはマップ構造を継承しません(値が変更されるとどうなりますか?)

+0

ここでmascojは正しいです。比較機能はキーにのみ渡されます。リファレンス:http://en.cppreference.com/w/cpp/container/map –

関連する問題