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

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

DDD
DDDオリジナル
2024-11-30 19:01:121001ブラウズ

How Can I Sort an std::map by Value in C  ?

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

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

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