C++ STL之sort

1
sort(began,end,compare);

对容器[begin,end)范围内排序

当你的容器中元素时一些标准类型(int float char)或者string时,你可以直接使用这些函数模板。但如果你时自己定义的类型或者你需要按照其他方式排序,你可以有两种方法来达到效果:一种是自己写比较函数。另一种是重载类型的’<’操作赋。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;

class myclass {
public:
myclass(int a, int b):first(a), second(b){}
int first;
int second;
bool operator < (const myclass &m)const {
return first < m.first;
}
};

bool less_second(const myclass & m1, const myclass & m2) {
return m1.second < m2.second;
}

int main() {

vector< myclass > vect;
for(int i = 0 ; i < 10 ; i ++){
myclass my(10-i, i*3);
vect.push_back(my);
}
for(int i = 0 ; i < vect.size(); i++)
cout << "(" << vect[i].first << "," << vect[i].second << ")\n";
sort(vect.begin(), vect.end());
cout << "after sorted by first:" << endl;
for(int i = 0 ; i < vect.size(); i++)
cout << "(" << vect[i].first << "," << vect[i].second << ")\n";
cout << "after sorted by second:" << endl;
sort(vect.begin(), vect.end(), less_second);
for(int i = 0 ; i < vect.size(); i++)
cout << "(" << vect[i].first << "," << vect[i].second << ")\n";

return 0 ;
}

参数compare的写法:

例如排序

1
2
3
4
5
 
bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}

当然还有许多写法,比如按照个位数大小排序

1
2
3
4
bool cmp(int a,int b) {
return a % 10 > b % 10;

}

按照字符串长度排序

1
2
3
bool cmp(string a, string b) {
return a.length() > b.length();
}
script>