質問: 値に基づいて std::map を簡単に並べ替えるにはどうすればよいですか?値?
答え:
従来のアプローチ (C 11 より前)
C 11 の導入前は、マップを値でソートするには、std::map をstd::ペア。これには、カスタム並べ替え関数の使用と、比較パラメータの手動指定が含まれます。
C 11 アプローチ
C 11 の出現により、よりクリーンなソリューションが登場しました。次のコード スニペットは、その方法を示しています。
template<typename A, typename B> std::multimap<B,A> flip_map(const std::map<A,B> &src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
この関数はマップ内のキーと値のペアを効果的に反転し、並べ替えられた値を反復処理できるようにします。
汎用連想ソース(C 11 以降)
柔軟性を高めるために、反転関数の汎用バージョンを作成できます。任意の連想コンテナーで動作できるようにします:
template<typename A, typename B, template<class,class,class...> class M, class... Args> std::multimap<B,A> flip_map(const M<A,B,Args...> &src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
この関数は入力として任意の連想コンテナー クラスを受け取り、std::map と std::unowned_map の両方で使用すると便利です。
以上がC で std::map を値で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。