作者jackwei (吐司)
看板C_and_CPP
標題[問題] 自訂compare function for sort in class
時間Mon Oct 24 22:34:35 2011
開發平台(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
→ firejox:順序... 10/24 22:41
→ firejox:不過既然包成class了 就去overload operator 會比較簡單.. 10/24 22:45
→ jackwei:請問您是說哪個順序? 所有的 function 都有寫 prototype 10/24 22:45
→ legnaleurc:這個狀況其實沒必要弄成 member function 10/25 01:37
→ legnaleurc:因為你要 sort 的型別只是個 int, 你其實可以只傳個 10/25 01:37
→ legnaleurc:回到你的 code, member function pointer 前面要加 & 10/25 01:39
→ legnaleurc:然後這個 function 也要是 static, 否則你就要 bind 10/25 01:39
→ legnaleurc:一個 instance 給它 10/25 01:39
→ jackwei:感謝樓上回應...不過用greater 還可以根據 SA class 10/25 01:57
→ jackwei:裡面的其他data member 資料來排序嗎 他好像只是單純用 > 10/25 01:57
→ loveme00835:tempCompareStandard 這個只用在要排序的一維陣列的選 10/25 01:59
→ loveme00835:則嗎? 10/25 01:59
→ loveme00835:^擇 ^權重 10/25 02:01
→ jackwei:是的 為了讓 Function_CompareGain 知道現在要根據 10/25 02:07
→ jackwei:Gij 中的哪筆資料來判斷大小 10/25 02:07
→ loveme00835:不過看來你Gij比完之後如果元素位置有更動, Gij的值也 10/25 02:11
→ loveme00835:要換才是 10/25 02:12
→ loveme00835:阿我看錯@@" 10/25 02:13