Defined in header
<algorithm>
对数组或容器内区间[first,last]中的元素进行特定的排序
sort函数模版
模版1
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
template< class RandomIt >
constexpr void sort( RandomIt first, RandomIt last );
使用operator<
比较元素,默认为由小到大排序
模版2
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
template< class RandomIt, class Compare >
constexpr void sort( RandomIt first, RandomIt last, Compare comp );
使用给定的二元比较函数comp比较元素,自定义比较顺序
sort使用方法
sort(v.begin(),v.end()); //默认排序
sort(v.begin(),v.end(),comp); //自定义排序
对数组元素排序
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[10] = {1,3,5,7,9,2,4,6,8,10};
sort(a,a+10);
for(int i=0;i<10;i++)
{
cout<<a[i]<<" "; //输出:1,2,3,4,5,6,7,8,9,10
}
return 0;
}
对容器元素排序
以容器vector为例
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v={1,3,5,7,9,2,4,6,8,10};
sort(v.begin(),v.end());
for(int i=0;i<10;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
return 0;
}
自定义排序
自定义排序,也就是给sort第三个参数设定特定的比较函数,改变排序策略。有两种方法,一种是定义bool函数,第二种是使用operator重载()运算。
1.
bool comp(const int a,const int b)
{
return a>b; //由大到小排序
}
2.
struct{
bool operator()(const int a,cosnt int b) const
{
return a>b; //由大到小排序
}
}comp;
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool com(const int a,const int b)
{
return a<b; //由小到大排序
}
struct{
bool operator()(const int a,const int b) const
{
return a>b; //由大到小排序
}
}cmp;
int main()
{
vector<int> v={1,3,5,7,9,2,4,6,8,10};
sort(v.begin(),v.end(),com); //由小到大排序
for(int i=0;i<10;i++)
{
cout<<v[i]<<" "; //1,2,3,4,5,6,7,8,9,10
}
cout<<endl;
sort(v.begin(),v.end(),cmp); //由大到小排序
for(int i=0;i<10;i++)
{
cout<<v[i]<<" "; //10,9,8,7,6,5,4,3,2,1
}
cout<<endl;
return 0;
}
greater与less
也可以使用函数greater
与less
来实现由大到小,和由小到大的排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v={1,3,5,7,9,2,4,6,8,10};
sort(v.begin(),v.end(),greater<int>()); //由大到小排序
for(int i=0;i<10;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
sort(v.begin(),v.end(),less<int>()); //由小到大排序
for(int i=0;i<10;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
return 0;
}
使用lambda表达式来实现自定义排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v={1,3,5,7,9,2,4,6,8,10};
// sort using a lambda expression
sort(v.begin(), v.end(), [](int a, int b) {
return a > b;
});
for(int i=0;i<10;i++)
{
cout<<v[i]<<" "; //10,9,8,7,6,5,4,3,2,1
}
cout<<endl;
return 0;
}