sort的具体用法
来源:互联网 发布:nginx 错误日志格式 编辑:程序博客网 时间:2024/04/27 23:06
玩ACM也快有一年了吧,也终于从裸C走向了C++的怀抱,怀着极大的热情,踩了无数了的坑,走到了现在,也想小试总结一下sort的用法,以备自己以后使用。为自己这么伟大,高尚的行为点一个赞。
sort是c++里面的algorithm里面的一个函数,在这里,你可以直接用它排序。他的默认排序是升序的,不过你可以用它的排序规则实现很多排序功能的。
bool cmp(const int &a,const int &b){
if(a!=b) return a>b;
else return a.b;
}
因为a>b,所以是降序排序,这就是一个排序规则。
那么问题来了,如果是一个结构体,该怎么排序呢?
我们先来定义一个结构体,按照他的平均值排序
struct trade{
int a;
int b;
double c;
}tr;
bool cmp(trade f1,trade f2){
if(f1.c!=f2.c) return f1.c>f2.c;
else return f1.c>f2.c;
}
这是结构体里面的降序排序,我们完全可以把>改成<来实现降序排序。
问题真的来了啊,如果里面有好几个排序规则,我们该怎么办呢?
哼,问题不大,我们可以设计一个复杂的排序规则啊。
还是以刚才的例子。
如果我们想要一个排序优先度a>b>c的降序排序规则,我们完全可以这么设置。
bool cmp(trade f1,trade f2){
if(f1.a!=f2.b) return f1.a>f2.a;
else if(f1.b!=f2.b) return f1.b>f2.b;
else if(f1.c!=f2.c) return f1.c>f2.c;
}
如果是升序规则,可以再自己定义啊。
最后再把杭电的一个排序题目的答案放出来辣;
哼哼哼;
#include<stdio.h>
#include<string>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct trade
{
int J;
int F;
double avg;
};
bool cmp(trade FJ1,trade FJ2)
{
if(FJ1.avg!=FJ2.avg)
return FJ1.avg>FJ2.avg;
else
return FJ1.avg>FJ2.avg;
}
int main()
{
int m,n,i;
trade tr;
vector<trade>tre;
double sum;
while(scanf("%d%d",&m,&n)&&(m!=-1&&n!=-1))
{
tre.clear();
sum=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&tr.J,&tr.F);
tr.avg=tr.J*1.0/tr.F;
tre.push_back(tr);
}
sort(tre.begin(),tre.end(),cmp);
for(i=0;i<tre.size();i++)
{
if(m>=tre[i].F)
{
sum+=tre[i].J;
m=m-tre[i].F;
}
else
{
sum+=tre[i].avg*m;
break;
}
}
printf("%.3lf\n",sum);
}
}
这是一个关于容器vector和struct组合的一个应用,最后加了一个自定义排序规则,就得到了最终的结果。
yeah,finghting
- sort的具体用法
- C++里的sort()函数的具体用法
- ShowModalDialog的具体用法
- ShowModalDialog的具体用法
- DllImport的具体用法
- setAttribute的具体用法
- handler的具体用法
- mkswap 的具体用法
- setAttribute的具体用法
- setAttribute的具体用法
- scp的具体用法
- Handler的具体用法
- mobiscroll的具体用法
- scrollLeft的具体用法
- setAttribute的具体用法
- datepicker的具体用法
- sscanf的具体用法
- selector的具体用法
- Java 递归实现汉诺塔问题
- Linux常用命令
- Intraweb 网页图标(shortcut icon)替换
- 颠倒的价牌
- 微信公众平台开发(一)(配置)
- sort的具体用法
- Audio 音频总线
- Java异常处理机制
- Number of Islands
- size classes 和sb
- Centos7安装cairo-dock,像苹果mac一样的桌面插件
- C++ STL编程初步摘抄笔记:using stl/30分钟学会STL
- mips cpu低版本gcc编译lua问题总结
- maven