[問題] 自訂compare function for sort in class

看板C_and_CPP (C/C++)作者 (吐司)時間14年前 (2011/10/24 22:34), 編輯推噓0(0019)
留言19則, 4人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): 大家都知道 algorithm 裡面有個 sort 函數 可以自訂 compare function 來定義 sort 時要依據什麼規則排列 看了一下網站的範例 http://www.cplusplus.com/reference/algorithm/sort/ 這個 function 好像必須像這種樣子 bool functionName(T a, T b); //T 為某種 type 現在我想要在某個 class 內的某個 member function 內 將某個陣列 X 排序 (也是此 class 的 data member) 排序的定義是依照另一個 data member Y 的資料 我的想法是 若將這個 Compare function 寫成這個 class 的 member function 就可以 access 到 Y 問題是這個 compare function 應該怎麼寫呢 呼叫 sort 的時候 第三個 argument 又應該怎麼寫呢 預期的正確結果(Expected Output): 正確 sort 錯誤結果(Wrong Output): 對 「sort(int*&, int*, <unresolved overloaded function type>)」 的呼叫沒有匹配 的函式 程式碼(Code):(請善用置底文網頁, 記得排版) 前情提要: gainListSorted 是一個二維陣列 大小是 size * size 所以 gainListSorted[i] 是一個一維陣列 現在想要針對這 size 個 一維陣列分別 sort sort 的基準是 Gij 這個二維陣列 tempCompareStandard 是 SA class 的 data member -------------------------------------------------- void SA::SomeFunction() { ... for(int i=0;i<size;i++){ for(int j=0;j<size;j++) gainListSorted[i][j] = j; tempCompareStandard = i; sort(gainListSorted[i], gainListSorted[i]+size, SA::Function_CompareGain); } } bool SA::Function_CompareGain(int i, int j) { return Gij[tempCompareStandard][i] > Gij[tempCompareStandard][j]; } 請問紅字怎麼改呢 或是有其他地方需要改 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.233.240

10/24 22:41, , 1F
順序...
10/24 22:41, 1F

10/24 22:45, , 2F
不過既然包成class了 就去overload operator 會比較簡單..
10/24 22:45, 2F

10/24 22:45, , 3F
請問您是說哪個順序? 所有的 function 都有寫 prototype
10/24 22:45, 3F

10/25 01:37, , 4F
這個狀況其實沒必要弄成 member function
10/25 01:37, 4F

10/25 01:37, , 5F
因為你要 sort 的型別只是個 int, 你其實可以只傳個
10/25 01:37, 5F

10/25 01:38, , 6F
10/25 01:38, 6F

10/25 01:39, , 7F
回到你的 code, member function pointer 前面要加 &
10/25 01:39, 7F

10/25 01:39, , 8F
然後這個 function 也要是 static, 否則你就要 bind
10/25 01:39, 8F

10/25 01:39, , 9F
一個 instance 給它
10/25 01:39, 9F

10/25 01:57, , 10F
感謝樓上回應...不過用greater 還可以根據 SA class
10/25 01:57, 10F

10/25 01:57, , 11F
裡面的其他data member 資料來排序嗎 他好像只是單純用 >
10/25 01:57, 11F

10/25 01:59, , 12F
tempCompareStandard 這個只用在要排序的一維陣列的選
10/25 01:59, 12F

10/25 01:59, , 13F
則嗎?
10/25 01:59, 13F

10/25 02:01, , 14F
^擇 ^權重
10/25 02:01, 14F

10/25 02:07, , 15F
是的 為了讓 Function_CompareGain 知道現在要根據
10/25 02:07, 15F

10/25 02:07, , 16F
Gij 中的哪筆資料來判斷大小
10/25 02:07, 16F

10/25 02:11, , 17F
不過看來你Gij比完之後如果元素位置有更動, Gij的值也
10/25 02:11, 17F

10/25 02:12, , 18F
要換才是
10/25 02:12, 18F

10/25 02:13, , 19F
阿我看錯@@"
10/25 02:13, 19F
文章代碼(AID): #1EfNT-aX (C_and_CPP)
文章代碼(AID): #1EfNT-aX (C_and_CPP)