成員函數作為問題排序中的比較器
嘗試使用提供的程式碼時,編譯器會引發錯誤,禁止檢索不合格的位址或帶括號的非靜態成員函數以形成指向成員函數的指標。此問題源自於 doCompare 成員函數的非靜態定義。
要解決此問題,需要將 doCompare 宣告為靜態。但是,如果函數需要存取MyClass 中的數據,則可以透過更改doCompare from:
doCompare( const int & i1, const int & i2 ) { // use some member variables }
To:
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中文網其他相關文章!