ホームページ >バックエンド開発 >C++ >ペアのベクトルを 2 番目の要素で効率的にソートするにはどうすればよいですか?

ペアのベクトルを 2 番目の要素で効率的にソートするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-09 13:47:24928ブラウズ

How to Efficiently Sort a Vector of Pairs by the Second Element?

ペアの 2 番目の要素によってペアのベクトルを効率的に並べ替える方法

この記事では、各ペアの 2 番目の要素を昇順で並べます。このタスク用のカスタム関数オブジェクトを作成することは実行可能な解決策ですが、既存の STL コンポーネントと std::less を利用する代替方法もあります。

カスタム コンパレータで std::sort を使用する

1 つのアプローチは、カスタム コンパレータを std::sort のオプションの 3 番目の引数として使用することです。このカスタム コンパレータは、sort_pred と呼ばれ、次のように定義されます。

struct sort_pred {
    bool operator()(const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;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> &amp;left, const std::pair<int,int> &amp;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>&amp;left, const std::pair<T1,T2>&amp;right) {
        Pred p;
        return p(left.second, right.second);
    }
};

With という汎用テンプレートこのテンプレートを使用すると、次のように希望する並べ替えを実現できます:

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

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

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