[问题] 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