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拼凑起来然后才问问题在哪,根本大哉问