首頁 > 後端開發 > C++ > 如何在 `std::sort` 中使用成員函數作為比較器?

如何在 `std::sort` 中使用成員函數作為比較器?

Linda Hamilton
發布: 2024-12-03 11:03:13
原創
882 人瀏覽過

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

成員函數作為問題排序中的比較器

嘗試使用提供的程式碼時,編譯器會引發錯誤,禁止檢索不合格的位址或帶括號的非靜態成員函數以形成指向成員函數的指標。此問題源自於 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板