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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-05 10:33:10682ブラウズ

How Can I Sort a std::map by Value, Not Key?

値による std::map の並べ替え

値による std::map の並べ替えには、標準の sort() 関数と同様の代替アプローチが必要です要素をキーによってのみ並べ替えます。これを実現するには、次の解決策を検討してください。

キーと値を反転

以下を使用して、元のマップのキーと値のペアを反転する新しいマルチマップを作成します。 function:

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;
}

Usage:

元のマップ (例: std::map src) を作成した後、マップを反転するだけです。値による並べ替え:

std::multimap<double, int> dst = flip_map(src);

汎用連想ソース

このソリューションは、可変引数テンプレートを使用して任意の連想コンテナで動作するように一般化できます。

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::map をキーではなく値で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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