对数据进行排序,是需要经常进行的操作。
手动写排序,归并,冒泡,插入之类的都可以,不过有algorithm
自带的sort
就省了一些麻烦了。
对需要排序的数组这样写sort(a,a+n)
(假设a为需要排序的数组,n为数组的长度)
再细化一点的话,就这样写:sort(a+n1,a+n2)
,这样是对a
数组的下标为n1的元素直到下标为n2的元素进行排序,自然,n2>n1。
但是吧,有时候,需要排序的不仅仅只是一个数组,这个数组与其他的信息有一定的联系,比如这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <iostream> #include <algorithm> #include <string> using namespace std;
struct Student { string name; int score; };
int main() { struct Student stu[3]={"stu1",70,"stu2",80,"stu3",60}; for(int i=0;i<3;i++) { cout<<stu[i].name<<" "<<stu[i].score<<endl; } return 0; }
|
结构体内为学生的姓名和成绩,我想以成绩为准排序,当然了,姓名和成绩的对应关系不能乱掉。
这个时候肯定不能写成sort(stu,stu+3)
,需要给sort加上一定的排序依据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <iostream> #include <algorithm> #include <string> using namespace std;
struct Student { string name; int score; };
bool compare(Student a,Student b) { return a.score>b.score; } int main() { struct Student stu[3]={"stu1",70,"stu2",80,"stu3",60}; sort(stu,stu+3,compare); for(int i=0;i<3;i++) { cout<<stu[i].name<<" "<<stu[i].score<<endl; } return 0; }
|
扯一点题外的,看看类
的排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <iostream> #include<algorithm> #include<string> using namespace std;
class Student { public: string name; int score; };
bool compare(Student a,Student b) { return a.score>b.score; } int main() { Student stu[3]={"stu1",70,"stu2",80,"stu3",60}; sort(stu,stu+3,compare); for(int i=0;i<3;i++) { cout<<stu[i].name<<" "<<stu[i].score<<endl; } return 0; }
|
两段代码的区别仅仅是结构体和类的区别而已,结构体和类长得如此相似,访问成员的方式都如此相似,他们的共同存在真是迷惑了不少人,颇有周瑜和诸葛两人之意。
http://www.cnblogs.com/starfire86/p/5367740.html,此文做了一定的解说,还不错。
生命重在折腾