首页 > 代码库 > 细说C++中的sort 函数

细说C++中的sort 函数

我们在算法程序中用的最多的函数就行sort,但经常会忘记如何写比较函数,这里详细做个总结。

1) C++中sort函数的原型

default (1)
template <class RandomAccessIterator>  void sort (RandomAccessIterator first, RandomAccessIterator last);
custom (2)
template <class RandomAccessIterator, class Compare>  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

包含RandomAccessIterator迭代器,自定义的包含Compare函数类;

2) Compare 函数类

Compare 函数类来对元素进行比较,实现排序;因此有以下三种方式来实现Compare类

1. 元素自身包含了比较关系,如int,double等基础类型,可以直接进行比较

greater<int>() 递减, less<int>() 递增,用伪函数可以实现;还包含

2. 元素本身为class或者struct,类内部需要重载< 运算符,实现元素的比较;

 注意事项:bool operator<(const className & rhs) const;  如何参数为引用,需要加const,这样临时变量可以赋值;重载operator<为常成员函数,可以被常变量调用; 

3. 类外实现,用bool (*) ( EleType a1,EleType a2)  或者 bool (*) (const EleType & a1, const EleType & a2) 

4. 函数类实现, 在类中重载()操作符

struct Info {
int val;
Info(int _val):val(_val) {}
bool operator<(Info rhs) const {
return val > rhs.val;
}
};
struct Cmp{
bool operator()(Info a1,Info a2) const {
return a1.val > a2.val;
}
};
bool cmp( Info a1, Info a2) {
 return a1.val < a2.val;
}

细说C++中的sort 函数