本文来自: std::sort
函数默认模板:
template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last);
可选模板:
template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
在一定范围内为元素排序:
将范围[first,last) 中的元素以升序排列,元素的比较优先使用操作符<, 其次使用函数comp。等价元素并不保证保持其原始相对顺序。
参数:
(1) first, last
随机访问迭代器,用于指向要排序序列的起始和结束位置。使用的范围是[first,last),包含从first到last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
RandomAccessIterator应当指向一个具有正确定义的swap操作的类型,并且该类型既可通过移动构造又可通过移动赋值。
(2)comp:
接受两个在指定严格弱排序范围内的元素作为参数的二元函数,并返回一个可转换为布尔值的值。返回的值表示第一个参数传递的元素是否在该函数定义的特定严格弱排序中位于第二个参数之前。
案例:
// sort algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::sort
#include <vector> // std::vector
bool myfunction (int i,int j) { return (i<j); }
struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;
int main () {
int myints[] = {32,71,12,45,26,80,53,33};
std::vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33
// using default comparison (operator <):
std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33
// using function as comp
std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
// using object as comp
std::sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80)
// print out content:
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出结果:
myvector contains: 12 26 32 33 45 53 71 80
时间复杂度: N*log2(N)
我自己理解是,如果不加上自定义的函数comp,这个函数默认就是升序排列。