C では、2 番目の要素に基づいてペアのベクトルを並べ替える必要がある状況に遭遇することがあります。提供された情報を使用して、これを簡単に達成する方法を調べてみましょう。
提供されたペアのベクトル vec は整数のペアを保持しており、各ペアの 2 番目の要素に基づいて昇順に並べ替えたいと考えています。カスタム関数オブジェクトに頼らずに、標準テンプレート ライブラリ (STL) と std::less を利用して作業を実行しましょう。
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 サイトの他の関連記事を参照してください。