sort和stable_sort

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);
  1. stable_sort会保证排序后元素的相对位置不变(把某序列按姓排序,如果姓相同而名不同,则视为等价,此时相对位置不改变,用stable_sort函数),使用merge sort算法
  2. sort不会保证排序后的相对位置相同,因此sort比stable_sort快,使用intersort算法
  3. 每个函数都有两个版本,第一个版本重载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;    
} 

猜你喜欢

转载自www.cnblogs.com/tianzeng/p/10390562.html