再次相遇sort, 再次的感悟
2011-10-21 10:36
155 查看
以前本人曾经在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)
.........
}
怎么样,有点收获吧。
当然,我所知道是有限的,不可能很全面,还望高手指点几招。
然而,今天又做了一个题目,又遇到了新的问题,下面做出说明。
题目是这样的:
Description
在对字符串的排序中,往往具有不同的规则来判断字符串的大小先后。这里有两种比较常见的规则:
1. 首先按字符串长度进行排序,对长度相同的字符串,按字母顺序进行排序。如:ab, gdh, c, gaa, caa排序后的结果是:c, ab, caa, gaa, gdh
2. 直接按字母顺序排序,把长度不同的串都按相同长度处理。如:ab, gdh, c, gaa, caa排序后的结果是:ab, c, caa, gaa, gdh
你的任务是写一个程序,对于输入的字符串,按照这两种方式分别进行排序。
Input
只有一组测试数据,测试数据包括多行:
第一行是字符串个数N,接下来的N行为字符串,字符串均为大小写字母,不需判错。见sample input
Output输出为两行,按要求输出字符串排序后的结果,第一行为上面第一种方法,第二行为第二种方法。每两个字符串中以一个空格间隔开。见sample output
现在摘录如下:
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)
.........
}
怎么样,有点收获吧。
当然,我所知道是有限的,不可能很全面,还望高手指点几招。
然而,今天又做了一个题目,又遇到了新的问题,下面做出说明。
题目是这样的:
Description
在对字符串的排序中,往往具有不同的规则来判断字符串的大小先后。这里有两种比较常见的规则:
1. 首先按字符串长度进行排序,对长度相同的字符串,按字母顺序进行排序。如:ab, gdh, c, gaa, caa排序后的结果是:c, ab, caa, gaa, gdh
2. 直接按字母顺序排序,把长度不同的串都按相同长度处理。如:ab, gdh, c, gaa, caa排序后的结果是:ab, c, caa, gaa, gdh
你的任务是写一个程序,对于输入的字符串,按照这两种方式分别进行排序。
Input
只有一组测试数据,测试数据包括多行:
第一行是字符串个数N,接下来的N行为字符串,字符串均为大小写字母,不需判错。见sample input
Output输出为两行,按要求输出字符串排序后的结果,第一行为上面第一种方法,第二行为第二种方法。每两个字符串中以一个空格间隔开。见sample output
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; }
相关文章推荐
- 【半年总结】——再次相遇,换个方式爱你
- 机房重构再次相遇UML
- 再次mergesort
- [程序猿感悟] 叶正盛:再次写给我们这些浮躁的程序员
- [C]某大侠的C语言学习感悟
- 关于控制系统设计的小感悟-单片机抗干扰
- HDU1425 sort 【STL堆排序】
- php程序员工作几年的感悟
- list 的自定义排序 Collection.sort()方法个人学习总结
- 剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
- SOA的实施之“道”—中间相遇
- 归并排序 (Merge Sort)
- 华为副总裁徐家骏离职:年薪千万工作感悟十二条
- 中国状元”在美国读大学后对中国教育的感悟
- 2月14日情人节即将来临,储君为大家找到了“程序员聊没女朋友的四大神坑”,辛苦奋斗的猿们不要再次入坑
- 【Leetcode】147. Insertion Sort List
- 不要再次困在Moblin的老问题上
- 处事感悟——给刚参加工作的朋友
- hdu 1234_sort的陷阱
- 2路归并排序(MERGE_SORT)