ホームページ >バックエンド開発 >C++ >C の 2 番目の要素に基づいてペアのベクトルをカスタムソートするにはどうすればよいですか?

C の 2 番目の要素に基づいてペアのベクトルをカスタムソートするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-13 12:12:10500ブラウズ

How to Custom Sort a Vector of Pairs Based on the Second Element in C  ?

ペアのベクトルのカスタム並べ替え

ペアのベクトルを並べ替えるシナリオを考えてみましょう (

std::ベクトル<:pair int><p>別の関数オブジェクトを実装せずにこれを実現するには、<pre class="brush:php;toolbar:false">std の 3 番目のパラメータを利用できます。 ::sort
、カスタム コンパレータを受け入れます。このコンパレータは、提供されたコンパレータを使用して 2 番目の要素に基づいて 2 つのペアを比較します。

たとえば、C 11 コンパイラを使用すると、ラムダ式でコンパレータを定義できます。

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
    return left.second < right.second;
});

または、

operator()
をオーバーロードするカスタム構造体を定義します。比較を実行する関数:

struct sort_pred {
    bool operator()(const std::pair<int,int>& left, const std::pair<int,int>& right) {
        return left.second < right.second;
    }
};

std::sort(v.begin(), v.end(), sort_pred());

さまざまな型やコンパレータで再利用できる汎用ソリューションが必要な場合は、次のようなテンプレートを作成します:

template <class T1, class T2, class Pred = std::less<T2>>
struct sort_pair_second {
    bool operator()(const std::pair<T1,T2>& left, const std::pair<T1,T2>& right) {
        Pred p;
        return p(left.second, right.second);
    }
};

このテンプレートでは、任意のカスタム コンパレータを使用してペアを並べ替えることができます:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

以上がC の 2 番目の要素に基づいてペアのベクトルをカスタムソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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