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

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

Mary-Kate Olsen
リリース: 2024-12-02 18:00:21
オリジナル
452 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート