ホームページ >バックエンド開発 >C++ >C `std::sort` でメンバー関数をコンパレータとして使用するにはどうすればよいですか?

C `std::sort` でメンバー関数をコンパレータとして使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-02 18:00:21446ブラウズ

How Can I Use a Member Function as a Comparator in C   `std::sort`?

並べ替え用のメンバー関数コンパレータの実装

C では、コレクションの並べ替えにはコンパレータ関数が必要です。メンバー関数をコンパレータとして利用しようとすると、コンパイル エラーが発生する可能性があります。

問題

次のクラスを考えてみましょう:

class MyClass {
    int * arr;
    // ...

    doCompare( const int & i1, const int & i2 ) { // uses member variables } 

    doSort() { std::sort(arr,arr+someSize, &doCompare); }
};

コンパイルこのコードはエラーを生成する可能性があります:

ISO C は修飾されていないアドレスの取得を禁止しています

解決策

この問題を解決する 1 つの方法は、doCompare を静的メンバー関数にすることです。ただし、doCompare が MyClass データへのアクセスを必要とする場合は、MyClass を比較ファンクターに変換できます。

これは、

doCompare( const int & i1, const int & i2 ) { // use some member variables }

bool operator () ( const int & i1, const int & i2 ) { // use member variables }
次に、sort 関数を次のように呼び出します。

doSort() { std::sort(arr, arr+someSize, *this); }
さらに、doSortメソッドは void などの値を返す必要があります。

次の例に示すように、別のオプションはクラス内でメンバー関数をラップすることです。

以上がC `std::sort` でメンバー関数をコンパレータとして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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