並べ替え用のメンバー関数コンパレータの実装
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 サイトの他の関連記事を参照してください。