[問題] c++ sort的用法

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

Links booklink

Contact Us: admin [ a t ] ucptt.com