C++mapコンテナvalue値でソート

981 ワード

通常のmapはデフォルトでkey値でソートされますが、mapにはvectorのようなsort()関数はありません.mapをvalue値でソートするとしますか?2つの方法があります.
方法1.mapのkeyとvalueをそれぞれpairタイプのvectorに格納し、vectorのsort関数を使用してソートします.map_verbは私のmap値を保存します.
私のmap値を保存します.
#include<algorithm>

typedef pair<string, int> PAIR;
int cmp(const PAIR &x, const PAIR &y)
{
return x.second > y.second;
}

for (map<string, int>::iterator map_iter = map_verb.begin(); map_iter != map_verb.end(); ++map_iter)
{
pair_vec.push_back(make_pair(map_iter->first, map_iter->second));
}
sort(pair_vec.begin(), pair_vec.end(), cmp);
for (vector<PAIR>::iterator curr = pair_vec.begin(); curr != pair_vec.end(); ++curr)
{
outfile << curr->first << "\t" << curr->second << endl;
}

最も重要なのはvectorのsort関数~~(sort関数でヘッダファイル#includeを導入する必要がある)
方法2.さらにmap構造を新規作成し、既知のmap値keyとvalueをそれぞれ新しいmapのvalueとkeyとすると、map構造は自動的にvalue値に従ってソートされます~~