作者hydebeast (晴日橘子)
看板C_and_CPP
標題[問題] c++ sort的用法
時間Thu Jan 25 12:33:51 2018
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: 法 但編譯不會過 就是上面有講到的*跟&的問題 但不會改 01/25 14:53
→ hydebeast: … 01/25 14:53
噓 loveflames: 又來一個貼圖的,你是嫌上面幾篇電的不夠嗎 01/25 14:55
推 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