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

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

Mary-Kate Olsen
リリース: 2024-12-10 22:35:11
オリジナル
655 人が閲覧しました

How Can I Sort a Vector of Pairs Based on the Second Element in C  ?

2 番目の要素を使用したペアのベクトルの並べ替え

2 番目の要素に基づいてペアのベクトルを並べ替えるのは、一般的なプログラミング タスクです。この記事では、既存の STL コンポーネントと std::less を使用してこれを実現するさまざまな方法を検討します。

方法 1: カスタム コンパレータ

カスタム コンパレータは一般的なアプローチです。 2 番目の要素に基づいてペアを比較する、オーバーライドされたoperator() 関数を含む構造体を作成します。例:

struct sort_pred {
    bool operator()(const std::pair<int, int>& left, const std::pair<int, int>& right) {
        return left.second < right.second;
    }
};
ログイン後にコピー

次に、このコンパレータを 3 番目の引数として使用して sort() を呼び出します:

std::sort(vec.begin(), vec.end(), sort_pred());
ログイン後にコピー

メソッド 2: ラムダ式 (C 11)

C 11 では、ラムダ式を使用して比較を定義できますfunction:

std::sort(vec.begin(), vec.end(), [](const std::pair<int, int>& left, const std::pair<int, int>& right) {
    return left.second < right.second;
});
ログイン後にコピー

方法 3: 汎用テンプレート ベースのコンパレーター (C 11)

再利用可能なコードの場合、汎用テンプレート ベースのコンパレーターを作成します:

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);
    }
};
ログイン後にコピー

次に、このテンプレートベースで sort() を呼び出します。 comparator:

std::sort(vec.begin(), vec.end(), sort_pair_second<int, int>());
ログイン後にコピー

推奨事項

再利用性を考慮すると、汎用のテンプレートベースのコンパレータが強力なオプションです。ただし、簡単にするために、多くの場合、カスタム コンパレータまたはラムダ式を作成するだけで十分です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート