PerlやRubyみたいに。stlのmapはディフォルトでキーでソートされていて、valueではできないっぽい。結論からするとpriority_queueを使うとよさそう。
#include <iostream> #include <map> #include <queue> #include <string> #include <boost/foreach.hpp> typedef std::map<std::string, int> container; typedef std::pair<std::string, int> value_type; struct second_order { bool operator()(const value_type& x, const value_type& y) const { return x.second > y.second; } }; int main() { container src; src["あ"] = 3; src["い"] = 2; src["う"] = 1; src["え"] = 10; src["お"] = 8; std::priority_queue<value_type, std::vector<value_type>, second_order> que; std::pair<std::string, int> p; BOOST_FOREACH(p, src) { que.push(p); } while ( !que.empty() ) { value_type item = que.top(); std::cout << item.first << "(" << item.second << ")" << std::endl; que.pop(); } }
実行結果。
/tmp% ./a.out う(1) い(2) あ(3) お(8) え(10)
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
- 作者: Scott Meyers,千住治郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/18
- メディア: 大型本
- この商品を含むブログ (7件) を見る