値による std::map の並べ替え
キーではなく値による std::map の並べ替えは、キーによる並べ替えよりも複雑になる可能性があります。鍵。この問題の詳細な分析と解決策は次のとおりです。
解決策 1: マルチマップを使用する
std::map を値で並べ替えるには、次のようにします。値をキーとし、キーを値とするマルチマップ。これにより、次の例のように、値で並べ替えることができます。
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; }
元のマップを反復処理し、反転したペアをマルチマップに挿入することで、キーと値の関係を本質的に反転し、次のことが可能になります。新しいキー (元の値) で並べ替えます。
解決策 2: 汎用連想ソース (C 11)必須)
代替の連想コンテナー (std::unowned_map など) の場合、次の一般的なソリューションを使用できます:
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 と std::unowned_map。
以上がstd::map をキーではなく値で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。