STL中自带了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);
下面对这三个参数进行说明:
first,last
随机访问迭代器到要排序的序列的初始和最终位置。访问的范围是[first,last),它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素comp
comp
二进制函数,接受范围中的两个元素作为参数,并返回可转换为bool的值。
需要注意的是,使用sort函数之后,容器内原来元素的顺序就被打乱了。
下面是例子
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
bool comp(int a, int b)
{
return(a > b);
}
int main()
{
double a[] = { 11,21,32,21,43,54,3,43,4545,66 };
vector<double>num (a, a + 10);
sort(num.begin(), num.end());
for (auto it = num.begin(); it != num.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//sort(num.begin(), num.end(), greater<double>());
sort(num.begin(), num.end(), comp);
for (auto it = num.begin(); it != num.end(); it++)
{
cout << *it << " ";
}
return 0;
}
对于第二种方法,参数的确定有2中方法,一种是自己写一个比较大小的函数,第二种方法就是调用c++自带的。在头文件functional里面,
functional提供了一堆基于模板的比较函数对象。它们是(看名字就知道意思了):equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。对于这个问题来说,greater和less就足够了,直接拿过来用:
- 升序:sort(begin,end,less<data-type>());
- 降序:sort(begin,end,greater<data-type>())