ホームページ  >  記事  >  バックエンド開発  >  標準ライブラリの並べ替え関数は、特定のフィールドに基づいてユーザー定義型を並べ替えることができますか?

標準ライブラリの並べ替え関数は、特定のフィールドに基づいてユーザー定義型を並べ替えることができますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 12:13:03725ブラウズ

Can the Standard Library Sort Function Sort User-Defined Types Based on Specific Fields?

標準ライブラリソートによるユーザー定義型のソート

質問:

標準ライブラリソートは可能ですかライブラリソート関数は、ライブラリ内の特定のフィールドに基づいてユーザー定義構造体のベクトルをソートするために使用されます。 structs?

例:

struct MyType {
    int a;
    int b;
};

vector<MyType> moo;

// Insert data into moo...

// Sort moo by the value of the 'a' field

答え:

はい、標準ライブラリのソート関数はこのシナリオを処理できます。ユーザー定義型が特定の条件を満たす場合要件:

  1. 比較演算子のオーバーロード: 型は、型のインスタンスの比較方法を指定するために、オーバーロードされた比較演算子 bool演算子<(const MyType& other) const を実装する必要があります。
  2. コピー コンストラクター: コピー コンストラクター (次のいずれか)コンパイラ生成またはカスタム) が存在する必要があります。

実装:

struct MyType {
    int a;
    int b;

    bool operator<(const MyType&amp; other) const {
        // Implementation that compares the 'a' fields
    }

    // Copy constructor
    MyType(const MyType&amp; other)
        : a(other.a), b(other.b) { }

    // Other constructors...
};

順序付け関数を使用した代替アプローチ:

比較演算子のオーバーロードが不可能な場合は、順序付け関数またはfunctor は、sort 関数の 3 番目の引数として代わりに使用できます。

bool type_is_less(const MyType&amp; t1, const MyType&amp; t2) {
    // Comparison logic
}

std::sort(c.begin(), c.end(), type_is_less);

このアプローチは、次のような場合に有益です。

  • 比較演算子のオーバーロードが望ましくない。
  • 組み込み型またはポインター型は並べ替える必要があります。
  • 複数の並べ替え基準は次のとおりです。必須です。

以上が標準ライブラリの並べ替え関数は、特定のフィールドに基づいてユーザー定義型を並べ替えることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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