sort类函数:
函数名 | 功能描述 |
---|---|
sort | 对给定区间所有元素进行排序 |
stable_sort | 和 sort() 函数功能相似,不同之处在于,对于 [first, last) 范围内值相同的元素,该函数不会改变它们的相对位置。 |
partial_sort | 对给定区间所有元素部分排序 |
partial_sort_copy | 对给定区间复制并排序 |
nth_element | 找出给定区间的某个位置对应的元素 |
is_sorted | 判断一个区间是否已经排好序 |
partition | 使得符合某个条件的元素放在前面 |
stable_partition | 相对稳定的使得符合某个条件的元素放在前面 |
在头文件<algorithm>定义
语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序。
通过cmp参数可以自定义排序规则。
cmp比较函数对象(即满足比较 (Compare) 概念的对象),若第一参数小于(即先序于)第二参数则返回 true 。
stl自带的规则:
排序规则 | 功能 |
---|---|
std::less | 底层采用 < 运算符实现升序排序,各关联式容器默认采用的排序规则。 |
std::greater | 底层采用 > 运算符实现降序排序,同样适用于各个关联式容器。 |
std::less_equal | 底层采用 <= 运算符实现升序排序,多用于 multimap 和 multiset 容器。 |
std::greater_equal | 底层采用 >= 运算符实现降序排序,多用于 multimap 和 multiset 容器。 |
cmp参数可以设置为函数、类或者lambda 表达式。
若设计为非升序排序,则cmp函数的编写:
bool cmp(int a,int b)
{
return a > b;
}
cmp类的编写要使用重载符重载():
其中C++中的 struct 和 class 基本是通用的,唯有几个细节不同:
- 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
- class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
- class 可以使用模板,而 struct 不能。
结构体的方式
struct cmp
{
//const和& 可提高效率
constexpr bool operator() (const typename &a,const typename &b){
return a > b; //排序规则,满足返回1,不满足返回0;
}
};
类的方式
class cmp
{
public:
//const和& 可提高效率
constexpr bool operator() (const typename &a,const typename &b){
return a > b; //排序规则,满足返回1,不满足返回0;
}
};
//cpp参考手册里面给的
bool operator()( const T& lhs, const T& rhs ) const;//(C++14 前)
constexpr bool operator()( const T& lhs, const T& rhs ) const;//(C++14 起)
lambda 表达式
// 用 lambda 表达式排序
std::sort(s.begin(), s.end(), [](int a, int b) {
return b < a;
});