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 サイトの他の関連記事を参照してください。