問題の並べ替えにおけるコンパレーターとしてのメンバー関数
提供されたコードを使用しようとすると、コンパイラーは修飾されていないアドレスの取得を禁止するエラーを発生させます。または、非静的メンバー関数を括弧で囲んでメンバー関数へのポインターを形成します。この問題は、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 サイトの他の関連記事を参照してください。