sort
//版本一 template <class RandomAccessIterator> void sort(RandomAccessIterator first,RandomAccessIterator last); //版本二 template <class RandomAccessIterator,class StrictWeakOrdering) void sort(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
stable_sort
//版本一 template <class RandomAccessIterator> void stable_sort(RandomAccessIterator first,RandomAccessIterator last); //版本二 template <class RandomAccessIterator,class StrictWeakOrdering) void stable_sort(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
- stable_sort会保证排序后元素的相对位置不变(把某序列按姓排序,如果姓相同而名不同,则视为等价,此时相对位置不改变,用stable_sort函数),使用merge sort算法
- sort不会保证排序后的相对位置相同,因此sort比stable_sort快,使用intersort算法
- 每个函数都有两个版本,第一个版本重载operator < ,第二个版本调用自己定义的function object
#include <iostream> #include <vector> #include <algorithm> using namespace std; class F { public: bool operator()(int i,int j) { return (i%10)>=(j%10); } }; int main() { vector<int> v{2,1,-1,5,6,3}; sort(v.begin(),v.end(),F()); for_each(v.begin(),v.end(),[](int i) { cout<<i<<" "; }); cout<<endl; return 0; }