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

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

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

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

問題の並べ替えにおけるコンパレーターとしてのメンバー関数

提供されたコードを使用しようとすると、コンパイラーは修飾されていないアドレスの取得を禁止するエラーを発生させます。または、非静的メンバー関数を括弧で囲んでメンバー関数へのポインターを形成します。この問題は、doCompare メンバー関数の非静的定義から発生します。

この問題を解決するには、doCompare を静的として宣言する必要があります。ただし、関数が MyClass 内からデータにアクセスする必要がある場合は、 doCompare を次のように変更することで比較ファンクターに変換できます。

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

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

doSort メソッド次に、次の構文を使用して比較関数を呼び出す必要があります:

doSort() { std::sort(arr, arr+someSize, *this); }

または、次のようになります。 std::mem_fun を利用してメンバー関数を無料関数に変換することが可能です。ただし、 std::sort は値による比較関数を受け入れるため、クラス自体内で関数をラップすることをお勧めします。このアプローチを採用して変更されたコードは次のようになります:

class MyClass {
    struct Less {
        Less(const MyClass& c) : myClass(c) {}
        bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} 
        MyClass& myClass;
    };
    doSort() { std::sort(arr, arr+someSize, Less(*this)); }
}

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

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