永发信息网

C++中有专门给对象数组排序的类方法吗,就像Java中的sort

答案:2  悬赏:70  手机版
解决时间 2021-01-28 08:18
C++中有专门给对象数组排序的类方法吗,就像Java中的sort
最佳答案
使用sort排序结构体网上例子很多的 就是先写一个排序函数
然后让sort按照你的函数排序就行了

STL 里面有个 sort 函数,可以直接对数组排序,复杂度为 n*log2(n) 。使用这个函数,需要包含头文件。
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是 [a,b) 。简单来说,有一个数组 int a[100] ,要对从 a[0] 到 a[99] 的元素进行排序,只要写 sort(a,a+100) 就行了,默认的排序方式是升序。
拿我出的“ AC 的策略”这题来说,需要对数组 t 的第 0 到 len-1 的元素排序,就写 sort(t,t+len);
对向量 v 排序也差不多, sort(v.begin(),v.end());
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是 bool 型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数 cmp
bool cmp(int a,int b)
{
return a>b;
}
排序的时候就写 sort(a,a+100,cmp);
假设自己定义了一个结构体 node
struct node{
int a;
int b;
double c;
}
有一个 node 类型的数组 node arr[100] ,想对它进行排序:先按 a 值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,就按 c 降序排列。就可以写这样一个比较函数:
以下是代码片段:
bool cmp(node x,node y)
{
if(x.a!=y.a) return x.a
if(x.b!=y.b) return x.b>y.b;
return return x.c>y.c;
}
排序时写 sort(a,a+100,cmp);
全部回答
在c/c++中,我们定义的变量所需的空间都是分配在栈上的,而new所需的空间都是分配在堆上的 在栈上的变量必须在代码中明确指出大小,所以在c/c++中定义数组必须指定大小 而java中所有的变量都是引用,换个角度理解就是c++中的指针,所以在java中的变量都是后期分配的,所以不需要在定义的时候就指定大小
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老视眼的意思是什么啊?知道的请说下!
求生之路2房主T人的指令
请问淮安93号汽油为什么是添加了乙醇的汽油?
使用卡线器时,卡线器有()或钳口斜纹磨平等缺
如何绑定老婆的微信
秦皇岛新一路福彩中心在哪,坐几路车
天睿的意思是什么啊?知道的请说下!
Don't write
我乘马航从上海往返马累,在吉隆坡机场转机,是
大家知道蛋糕店加盟哪家比较靠谱,加盟后服务
什么是闪存器
雝雝喈喈的意思是什么啊?知道的请说下!
【一度等于多少分】1度=多少分这个分指的是什
姜夔的词是什么风格特色
一钢筋混凝土梁,断面尺寸如图4-9所示,采用C
推荐资讯
下列各项中,不属于劳动管理表单的是(  )
沈阳哪里有塑料板卖
郭德纲相声中说吃糖饼烫后脑勺儿,是怎么回事
求出1!+2!+3+!+…+10!的和是否是完全平方数?
韩语儿童歌蜘蛛在哪可以找歌词
我国中央银行基本上是按照( )划分货币层次的
译介的意思是什么啊?知道的请说下!
dell inspiron 14 3421 想重装系统 装WIN7 32
欣媿的意思是什么啊?知道的请说下!
如何看待网友对“里约奥运会中国运动员遭受不
如果花的叶子变黄且伴有黑点是因为缺少什么
零榆的意思是什么啊?知道的请说下!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?