我们都知道,sort函数是C++标准库<algorithm>中的一个库函数。它的功能是对数组/容器中的元素进行排序。用法示例如下:
一.对数组进行排序
示例:
int a[] = {1,3,7,2}; sort(a,a + 4);
这种情况下(即默认情况下),实际上是对数组a进行升序排序。我们也可以修改sort函数中的第三个参数内容,来实现自定义排序。
示例:
bool cmp(int a, int b) { return a > b; } int main() { int a[] = {1,3,7,2}; sort(a,a + 4,cmp); }
通过自定义cmp函数,就实现了对数组a进行降序排序。当然此处的cmp中的规则比较简单,也可以对结构体、类等其他复杂类型的数据进行排序,不过cmp的内容往往都要改写。(cmp函数是用于定义比较规则的,sort函数正是基于这种规则进行排序的)
二.对容器进行排序(以vector为例)
示例:
vector<int> a = {1,3,7,2}; sort(a.begin(),a.end());
同数组排序类似,只不过函数的参数不同。降序排序的实现同前面一样。
三.注意事项
如果要把sort函数要被类中成员函数调用且使用自定义的cmp函数的话,此时cmp函数必须是static函数或者是全局的。
示例:
class test { static bool cmp(int a,int b) { return a > b; } public: void fun(vector<int>& a) { sort(a.begin(),a.end(),cmp); } };
sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。这是 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。