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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-16 21:31:121009ブラウズ

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

2 番目の要素に基づいてペアのベクトルを並べ替える

C では、2 番目の要素に基づいてペアのベクトルを並べ替える必要がある状況に遭遇することがあります。提供された情報を使用して、これを簡単に達成する方法を調べてみましょう。

提供されたペアのベクトル vec は整数のペアを保持しており、各ペアの 2 番目の要素に基づいて昇順に並べ替えたいと考えています。カスタム関数オブジェクトに頼らずに、標準テンプレート ライブラリ (STL) と std::less を利用して作業を実行しましょう。

C 14 Lambda の使用

C 14 の最も簡単なソリューションはラムダを利用します。パラメータ型推論を使用:

std::sort(vec.begin(), vec.end(), [](auto &left, auto &right) {
    return left.second < right.second;
});

この匿名ラムダは左と右をキャプチャします。をペアにして、左の 2 番目の要素が右の 2 番目の要素より小さい場合に true を返し、効果的にベクトルを昇順に並べ替えます。

カスタム コンパレータの使用

ラムダがオプションでない場合は、次のように定義できます。並べ替えを処理するカスタム コンパレータ:

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

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

sort_pred 構造体は比較演算子を実装し、次の 2 番目の要素を比較します。

テンプレート コンパレータの使用

コンパレータを一般化し、並べ替えに再利用するには、次のテンプレートを作成します。

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

このテンプレートを使用して、並べ替えることができるようになりましたusing:

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

テンプレート引数を指定することで、ペア要素の型を指定し、降順の std::greater などの別の述語を使用して比較をカスタマイズすることもできます。

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

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