※質問が分かりにくいようでしたら編集しますのでご指摘願います。
###現状
ある集計処理をしていた時のことです。
当初2次元配列ぽいvectorを用意して処理しようとしていました。
サンプルコードの例ですとa
の要素に+10
する部分です。
自分がまだ知らないだけなのかもしれないですが冗長になりそうなので、
mapで集計させて最後にvectorに移し替えて降順ソートして出力するようにしました。
###知りたいこと
mapの値でソートしたい時にはどうしたら良いでしょうか?
また、vectorでも良いのですがpairを使った2次元配列のようなものでmapのようにキー指定してa
の値を+10
するなどの2次元vectorを参照する簡易な方法があれば知りたいです。
###検索で参考にしたもの
「ソートも、サーチも、あるんだよ」
~標準C++ライブラリにみるアルゴリズムの面白さ
上記は@Zuishinさんの回答からのリンクです
サンプルコード
C++
1#include <cstdio> 2#include <iostream> 3#include <iterator> 4#include <vector> 5#include <string> 6#include <algorithm> 7#include <map> 8 9int main() 10{ 11 std::map<std::string, int> map1; 12 13 //集計処理 14 map1["a"] = 0; 15 map1["b"] = 0; 16 map1["c"] = 0; 17 18 map1["a"] += 1; 19 map1["b"] += 2; 20 map1["c"] += 3; 21 22 map1["a"] += 10; 23 map1["b"] += 200; 24 map1["c"] += 30; 25 26 //vectorへ変換 27 struct data 28 { 29 std::string name; 30 int price; 31 }; 32 std::vector<data> d; 33 34 for (auto itr = map1.begin(); itr != map1.end(); ++itr) 35 { 36 d.push_back({itr->first, itr->second}); 37 } 38 39 //降順ソート 40 sort(d.begin(), d.end(), [](const data &x, const data &y) { return x.price > y.price; }); 41 42 //名前出力 43 for (data x : d) 44 { 45 std::cout << x.name << " "; 46 } 47 48 return 0; 49} 50 51// 出力結果 52// b c a
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/21 14:32 編集
2018/10/21 14:37 編集
2018/10/21 14:43
2018/10/21 14:52
2018/10/21 14:55