sort函数使用的基本知识
STL中就自带了排序函数sortsort 对给定区间所有元素进行排序 要使用此函数只需用#include <algorithm> sort即可使用,语法描述为:
sort(begin,end),表示一个范围,例子:#include <algorithm>int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
输出结果将是把数组a按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).
1)自己编写compare函数:
bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}#include <algorithm>
int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20,compare);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
//这些都是可以通过自己的改写将运算的结果输出的,然后相对来说速度更快也不容易出错。
//使用的关键点在于头文件为#include<algorithm>
//第二个就是使用的参数要自己注意,要不就是直接对数组使用,然后就是将数组的下标返回
//或者是自己重新定义一个顺序,然后将其它的东西按照顺序输出,其他的就是靠自己的使用了。
当然,最后值得庆祝的一件事情是在学长讲解了结构体使用自己定义好的函数从新对以前的序列进行排序时,我重新将今天的第二题的代码写了一下,成功的AC了而且相对与开始的代码现在已经变得简单多了,这件事情让自己很开心。虽然感觉自己一直在做水题,和别人比起来差距非常大,但是看见自己的进步就是非常开心的
#include <iostream>
#include <algorithm>
using namespace std;
//首先定义一个结构体,让自己可以在这种条件下进行操作
class tianxia{
public:
int attack;
int bonus;
};
//模仿自己定义一个cmp函数,然后就可以直接使用了,加油,就像她说的一样,继续努力
int cmp(tianxia x,tianxia y){
return x.attack < y.attack;
}
int main()
{
bool zhangjie = true;
int s,n;
cin>>s>>n;
//显然,现在申请一个结构体的方式来处理问题肯定会比刚刚直接使用两个数组的方式来的简单的多,自己试一试
tianxia *dig = new tianxia [n];
for(int i = 0;i < n; i++){
cin>>dig[i].attack>>dig[i].bonus;
}
sort(dig,dig + n,cmp);
for(int i =0;i < n; i++ ){
if(s>dig[i].attack){s+=dig[i].bonus;}
else {cout<<"NO"<<endl;zhangjie=false;break;}
}
if(zhangjie){cout<<"YES"<<endl;}
return 0;}
//当然,最后很开心的采用了第二种方式,也是成功AC
运算符的重载,然后使用,代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
//首先定义一个结构体,让自己可以在这种条件下进行操作
class tianxia{
public:
int attack;
int bonus;
bool operator < (const tianxia &rhs) const{
return attack < rhs.attack;}
};
//模仿自己定义一个cmp函数,然后就可以直接使用了,加油,就像她说的一样,继续努力
/*int cmp(tianxia x,tianxia y){
return x.attack < y.attack;
}*/
int main()
{
bool zhangjie = true;
int s,n;
cin>>s>>n;
//显然,现在申请一个结构体的方式来处理问题肯定会比刚刚直接使用两个数组的方式来的简单的多,自己试一试
tianxia *dig = new tianxia [n];
for(int i = 0;i < n; i++){
cin>>dig[i].attack>>dig[i].bonus;
}
sort(dig,dig + n);
for(int i =0;i < n; i++ ){
if(s>dig[i].attack){s+=dig[i].bonus;}
else {cout<<"NO"<<endl;zhangjie=false;break;}
}
if(zhangjie){cout<<"YES"<<endl;}
return 0;
}
/*struct Dragon{
int x,y;
bool operator < (const Dragon &rhs) const{
return x < rhs.x;
}
}dragon[1010];
sort(dragon,dragon+n);*/