看板 C_and_CPP 關於我們 聯絡資訊
rt 如果小弟寫了一個class p p(string s, int n) 接著 p a("a", 1); p b("b", 2); 然後想用sort以n的大小來排序 比如想大到小的話排起來就是b a 請問該怎麼寫呢? ----- Sent from JPTT on my Sony D6653. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.105.52.141 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1516854834.A.C0D.html
LPH66: 問1: 如果不是 class p 而是普通數字你會寫嗎? 01/25 12:37
LPH66: 問2: 寫過運算子覆載嗎? 01/25 12:38
Sidney0503: 放到container然後使用std::sort 01/25 12:38
Sidney0503: 然後自定義operator< 01/25 12:38
Sidney0503: 不好意思說錯 是自定義functor 01/25 12:47
hydebeast: l大 會的 01/25 13:08
hydebeast: s大 不好意思可以稍微詳細一點嗎? 01/25 13:08
alan23273850: 簡單來說就是針對新物件自定義大小關係,網路上都 01/25 13:39
alan23273850: 找得到,有兩種寫法 01/25 13:39
alan23273850: 關鍵字:cpp custom sort 01/25 13:39
BlazarArc: 三樓說的用std::sort (3)的用法 下面也有例子 01/25 13:46
hydebeast: 小弟參考網路類似的例子 bool cmp(p&a, p&b) 01/25 13:52
hydebeast: {return a<b} 然後再sort(c.begin(),c.end(),cmp) 01/25 13:53
hydebeast: c是vector<p*>c 可是這樣會錯誤 好像是因為我的cmp裡 01/25 13:54
hydebeast: 面是p& vector是p*嗎?抱歉小弟對&跟*還很混亂 可是不 01/25 13:55
hydebeast: 管想把cmp的&改*還是反過來vector的*改&都會錯誤 01/25 13:56
hydebeast: 另外還到定義operator<(p&a,p&b){return a.n<b.n} 01/25 13:58
hydebeast: 然後直接sort的做法 可是這樣sort出來跟沒定義<的時候 01/25 13:59
hydebeast: 沒差別@@ 01/25 13:59
hydebeast: 小弟目前網路看到的都是類似bool cmp那個的做法 都會出 01/25 14:12
hydebeast: 現*跟&的問題 請問怎麼解QQ對*跟&真的不熟 01/25 14:12
Sidney0503: 上面已經說了關鍵字:cpp custom sort 英文google 01/25 14:33
Sidney0503: 第一篇就是了 01/25 14:33
hydebeast: http://i.imgur.com/CgzjTY3.jpg 小弟照搜尋第一篇的方 01/25 14:53
hydebeast: 法 但編譯不會過 就是上面有講到的*跟&的問題 但不會改 01/25 14:53
hydebeast: … 01/25 14:53
hydebeast: http://i.imgur.com/mZ1eE5B.jpg 上面的程式碼 01/25 14:54
loveflames: 又來一個貼圖的,你是嫌上面幾篇電的不夠嗎 01/25 14:55
hydebeast: https://ideone.com/DZGBYz 很抱歉~ 01/25 14:59
Sidney0503: 不要使用* 初學直接傳實體就好 01/25 15:07
hydebeast: 程式碼本身是題目給的 他只要求把sort部分寫出來 而且 01/25 15:15
hydebeast: 小弟有試著把*都去掉 可是person p會出錯… 01/25 15:15
hydebeast: 另外三個class裡面的public也是小弟寫的 不過如果沒加s 01/25 15:19
hydebeast: ort的話跑起來結果是對的 還是說那部分有錯呢? 01/25 15:19
jerryh001: cmp不對 應該要person* 而不是const person& 01/25 15:28
hydebeast: j大我有改過那樣 不過這樣a.ID會錯 他說expression mus 01/25 15:34
hydebeast: t have class type 01/25 15:34
LPH66: 我覺得你先回頭搞懂 * & 的意義跟用法再回到這題上來好了 01/25 15:40
LPH66: 你這裡撞到的問題都跟你原來的 sort 幾乎無關 01/25 15:40
LPH66: 反而都是 * & 這些觀念不清楚造成的 01/25 15:40
loveflames: 你不會把問題單純化嗎,明明問題只是在怎麼排序,非得 01/25 15:41
loveflames: 連繼承也一起扯進來 01/25 15:41
LPH66: 你這裡面只有一個地方跟 sort 有關: 01/25 15:41
LPH66: 比較函數收的型態是元素型態, 你的元素是 p* 它就收 p* 01/25 15:42
LPH66: 你的元素是 p 它就收 p; 至於怎麼寫就要看你參數是什麼 01/25 15:42
LPH66: 這裡就是我說你沒搞懂的地方了, 不是 * & . -> 亂試 01/25 15:43
LPH66: 而是去知道寫這個符號代表什麼意義, 要怎麼找到你要的資料 01/25 15:43
loveflames: 不熟麻煩請循序漸進,不是把一堆有問題的code拼湊起來 01/25 15:45
loveflames: 然後才問問題在哪,根本大哉問 01/25 15:46
hydebeast: 感謝各位跟L大 解出來了 01/25 16:05
hydebeast: *LP大 01/25 16:08
pizzafan: ↑這邊有youtuber嗎? 要做中文版講解嗎? 或是改良更好些 01/25 18:39