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: 寫過運算子覆載嗎?
放到container然後使用std::sort然後自定義operator<不好意思說錯 是自定義functor
簡單來說就是針對新物件自定義大小關係,網路上都找得到,有兩種寫法關鍵字:cpp custom sort
作者:
BlazarArc (Midnight Sun)
2018-01-25 13:46: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出來跟沒定義<的時候沒差別@@
小弟目前網路看到的都是類似bool cmp那個的做法 都會出現*跟&的問題 請問怎麼解QQ對*跟&真的不熟
上面已經說了關鍵字:cpp custom sort 英文google第一篇就是了
程式碼本身是題目給的 他只要求把sort部分寫出來 而且小弟有試著把*都去掉 可是person p會出錯…另外三個class裡面的public也是小弟寫的 不過如果沒加sort的話跑起來結果是對的 還是說那部分有錯呢?
作者: jerryh001 2018-01-25 15:28:00
cmp不對 應該要person* 而不是const person&
j大我有改過那樣 不過這樣a.ID會錯 他說expression must have class type
作者:
LPH66 (-6.2598534e+18f)
2018-01-25 15:40:00我覺得你先回頭搞懂 * & 的意義跟用法再回到這題上來好了你這裡撞到的問題都跟你原來的 sort 幾乎無關反而都是 * & 這些觀念不清楚造成的
你不會把問題單純化嗎,明明問題只是在怎麼排序,非得連繼承也一起扯進來
作者:
LPH66 (-6.2598534e+18f)
2018-01-25 15:41:00你這裡面只有一個地方跟 sort 有關:比較函數收的型態是元素型態, 你的元素是 p* 它就收 p*你的元素是 p 它就收 p; 至於怎麼寫就要看你參數是什麼這裡就是我說你沒搞懂的地方了, 不是 * & . -> 亂試而是去知道寫這個符號代表什麼意義, 要怎麼找到你要的資料
不熟麻煩請循序漸進,不是把一堆有問題的code拼湊起來然後才問問題在哪,根本大哉問