ホームページ >バックエンド開発 >C++ >std::map を値で効率的に並べ替える方法

std::map を値で効率的に並べ替える方法

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

How to Efficiently Sort a std::map by Value?

値で std::map を並べ替える方法

キーではなく値で std::map を並べ替えるのは難しい場合があります。一般的な解決策の 1 つは、キーと値のペアを反転して並べ替える一時的なマルチマップを作成することです。ただし、よりクリーンで汎用性の高いアプローチを提供できる代替手法があります。

ペアの反転

次のコード スニペットは、キーと値のペアを反転する方法を示しています。 std::map で、値でソートされた新しいマルチマップを作成します:

template<typename A, typename B>
std::pair<B,A> flip_pair(const std::pair<A,B> &amp;p)
{
    return std::pair<B,A>(p.second, p.first);
}

template<typename A, typename B>
std::multimap<B,A> flip_map(const std::map<A,B> &amp;src)
{
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), 
                   flip_pair<A,B>);
    return dst;
}

元のマルチマップで flip_map を呼び出すことによってstd::map を使用すると、値でソートされたマルチマップを取得できます。

Generic Associative Source

このアプローチは、可変引数テンプレートを使用して任意のタイプの連想コンテナーを反転するように一般化できます。 :

template<typename A, typename B, template<class,class,class...> class M, class... Args>
std::multimap<B,A> flip_map(const M<A,B,Args...> &amp;src)
{
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(),
                   std::inserter(dst, dst.begin()),
                   flip_pair<A,B>);
    return dst;
}

この汎用オーバーロードは、 std::transform アルゴリズム (std::map および std::unowned_map を含む)。

以上がstd::map を値で効率的に並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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