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