码迷,mamicode.com
首页 > 编程语言 > 详细

细说C++中的sort 函数

时间:2014-10-21 00:34:06      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:ar   sp   on   amp   ef   bs   算法   c++   as   

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

标签:ar   sp   on   amp   ef   bs   算法   c++   as   

原文地址:http://www.cnblogs.com/purejade/p/4039108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!