ホームページ >バックエンド開発 >C++ >std::map をキーではなく値で並べ替えるにはどうすればよいですか?

std::map をキーではなく値で並べ替えるにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 05:22:13341ブラウズ

How Can I Sort an std::map by Value Instead of Key?

値による 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。