我们在算法程序中用的最多的函数就行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;
}