再次相遇sort, 再次的感悟
以前本人曾经在CSDN上面发表过一篇关于sort的用法的文章。
现在摘录如下:
sort 函数是经常要用到的高级函数,用到好处,你会感觉你真的很棒!
但是,第一个问题就是,你十分了解sort函数吗?其实不然。
如果你就不彻底了解它,怎能用好呢?现在让我小露一手吧!
我们可以自定义sort函数呢,当然,它要和结构体共同使用,那样更爽,
它的这个功能主要用在多级排序上,方便死了。
例如:
struct student
{
char name;
int x, y, z;
}stu[1000];
bool check(strdent a, student b)
{
if(a.x > b.x)return true;
if(a.x == b.x && a.y > b.y) return true;
return false;
}
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
cin>>stu[i].name>>stu[i].x>>stu[i].y>>stu[i].z;
sort(stu, stu+n, check)
.........
}
怎么样,有点收获吧。
当然,我所知道是有限的,不可能很全面,还望高手指点几招。
然而,今天又做了一个题目,又遇到了新的问题,下面做出说明。
题目是这样的:
Sample Input
5
ab
gdh
c
gaa
caa
Sample Output
c ab caa gaa gdh
ab c caa gaa gdh
显然,这个是一个十分简单的题目,用上面的方法,立即
就可以解决,但是要说明的是,当你自定义了一个Check
函数以后,就不能用sort原来自身的比较功能。要想用的
话,必须再次定义一下。不然,连编译都通不过。
下面贴出我的样例代码(是通过了的)
#include "iostream"
#include "string"
#include "cstring"
#include "algorithm"
using namespace std;
struct str
{
string substr;
}allstr[1001];
bool Check(str s1, str s2) //这个就是用来解决第一种排序了
{
if(s1.substr.length() < s2.substr.length()) return true;
if(s1.substr.length()==s2.substr.length() && s1.substr.compare(s2.substr)<0) return true;
return false;
}
bool Check1(str s1, str s2) //这个就是sort函数自身所带有功能,但是,在这里还要重新定义一下,不然不可用
{
if(s1.substr.compare(s2.substr) < 0) return true;
return false;
}
int main()
{
int Case;
cin>>Case;
for(int i=0; i<Case; i++)
cin>>allstr[i].substr;
sort(allstr, allstr+Case, Check);
for(int i=0; i<Case-1; i++)
cout<<allstr[i].substr<<" ";
cout<<allstr[Case-1].substr<<endl;
sort(allstr, allstr+Case, Check1);
for(int i=0; i<Case-1; i++)
cout<<allstr[i].substr<<" ";
cout<<allstr[Case-1].substr<<endl;
}
posted on 2011-10-21 10:36 More study needed. 阅读(436) 评论(0) 编辑 收藏 举报