ペアのベクトルのカスタム並べ替え
ペアのベクトルを並べ替えるシナリオを考えてみましょう (
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 サイトの他の関連記事を参照してください。