C++结构体排序
在C++中,对结构体的排序方式比C语言丰富的多。在C语言中,我们主要是通过qsort进行排序操作(抛开手写排序算法不说)。
在C++<algorithm>中,有一个十分强大的排序函数sort,他的内部综合了许多种排序算法,因此非常高效。并且,用它来对结构体排序也十分方便。
先贴一段示例代码:
1 #include <cstdio> 2 #include <queue> 3 #include <vector> 4 #include <algorithm> 5 #include <iostream> 6 using namespace std; 7 struct Mi{ 8 int p; 9 int h; 10 int c; 11 double k; 12 Mi(int p,int h,int c,int k):p(p),h(h),c(c),k(k){} 13 bool operator < (const Mi &a)const //对应less,代表升序,改变下行符号方向反之 14 { 15 return p < a.p; 16 } 17 bool operator > (const Mi &a)const //对应greater,代表降序、、、改变下行符号方向反之 18 { 19 return p > a.p; 20 } 21 }; 22 bool cmp(const Mi &a,const Mi &b){ 23 return a < b;//<代表升序,>代表降序 24 } 25 int main(){ 26 vector<Mi> vec; 27 int m; 28 scanf("%d",&m); 29 for(int i = 0;i < m;i++){ 30 int p,h,c; 31 scanf("%d%d%d",&p,&h,&c); 32 vec.push_back(Mi(p,h,c,1.0*p/h)); 33 } 34 //sort(vec.begin(),vec.end());//升序排序 35 //sort(vec.begin(),vec.end(),cmp);//升序排序 36 //sort(vec.begin(),vec.end(),less<Mi>());//升序排序 37 sort(vec.begin(),vec.end(),greater<Mi>());//降序排序 38 int wei = 0;; 39 for(vector<Mi>::iterator it = vec.begin();it!=vec.end();it++){ 40 cout <<it->p << " " << it->h << " " << it->c << " " << endl; 41 } 42 return 0; 43 }
代码中利用注释进行了简单的注解。
另外需要注意的一点是sort中的cmp函数与qsort中的cmp函数区别。
sort cmp 是bool类型的,意味着只有0,1两个返回值,而qsort中还包括0的情况,所以qsort一般是a-b,而sort一般是a<b的形式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架