ペアの 2 番目の要素によってペアのベクトルを効率的に並べ替える方法
この記事では、各ペアの 2 番目の要素を昇順で並べます。このタスク用のカスタム関数オブジェクトを作成することは実行可能な解決策ですが、既存の STL コンポーネントと std::less を利用する代替方法もあります。
カスタム コンパレータで std::sort を使用する
1 つのアプローチは、カスタム コンパレータを std::sort のオプションの 3 番目の引数として使用することです。このカスタム コンパレータは、sort_pred と呼ばれ、次のように定義されます。
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
このコンパレータを利用するには、単純に std::sort:
std::sort(v.begin(), v.end(), sort_pred());
C を使用して渡します。 Lambdas
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; });
ペア ソートに汎用テンプレートを使用する
柔軟性と再利用性を高めるために、次のように作成できます。 sort_pair_second:
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); } };
With という汎用テンプレートこのテンプレートを使用すると、次のように希望する並べ替えを実現できます:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
以上がペアのベクトルを 2 番目の要素で効率的にソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。