zoukankan      html  css  js  c++  java
  • algorithm库介绍之---- stable_sort()方法 与 sort()方法 .

    文章转载自:http://www.cnblogs.com/ffhajbq/archive/2012/07/24/2607476.html

    关于stable_sort()和sort()的区别:

    你发现有sort和stable_sort,还有 partition 和stable_partition, 感到奇怪吧。其中的区别是,带有stable的函数可保证相等元素的原本相对次序在排序后保持不变。或许你会问,既然相等,你还管他相对位置呢,也分不清 楚谁是谁了?这里需要弄清楚一个问题,这里的相等,是指你提供的函数表示两个元素相等,并不一定是一摸一样的元素。

    例如,如果你写一个比较函数:

    bool less_len(const string &str1, const string &str2)
    {
            return str1.length() < str2.length();
    }

    此时,"apple" 和 "winter" 就是相等的,如果在"apple" 出现在"winter"前面,用带stable的函数排序后,他们的次序一定不变,如果你使用的是不带"stable"的函数排序,那么排序完 后,"Winter"有可能在"apple"的前面。

    举例说明:

    #include <vector>
     #include <iostream>
     #include <algorithm>
     
     using namespace std;
     
     bool comp_as_int(double i, double j)
     {
         return (int(i)<int(j));
     }
     
     
     int main()
     {
         double mydoubles[] = {3.14, 1.41, 2.72, 4.67, 1.73, 1.32, 1.62, 2.58};
         vector<double> v;
         vector<double>::iterator it;
     
         v.assign(mydoubles, mydoubles + 8);
         
         cout<<"use default comparison:"<<endl;
         stable_sort(v.begin(), v.end());
     
         for(it = v.begin(); it != v.end(); it++)
             cout<<*it<<" ";
         cout<<endl;
     
         cout<<"use selfdefined comparison function comp_as_int():"<<endl;
         v.assign(mydoubles, mydoubles + 8);
         stable_sort(v.begin(), v.end(), comp_as_int);
         
         for(it = v.begin(); it != v.end(); it++)
             cout<<*it<<" ";
         cout<<endl;
         cout<<"if it is not sorted with stable_sort(), the sequence of all elements between 1 and 2 will be set randomly..."<<endl;
     
         return 0;
     }

    输出结果:

    1 use default comparison:
    2 1.32 1.41 1.62 1.73 2.58 2.72 3.14 4.67
    3 use selfdefined comparison function comp_as_int():
    4 1.41 1.73 1.32 1.62 2.72 2.58 3.14 4.67
    5 if it is not sorted with stable_sort(), the sequence of all elements between 1 and 2 will be set randomly...




  • 相关阅读:
    Objective-C中#define的常见用法
    OpenGL ES为缓存提供数据的7个步骤
    绕指定点旋转算法
    矩阵平移旋转缩放公式
    矩阵和向量的乘法顺序
    干货集合
    RGB颜色空间与YCbCr颜色空间的互转
    UINavi中push控制器的时候隐藏TabBar
    CZLayer的阴影
    CALayer初认识
  • 原文地址:https://www.cnblogs.com/lakeone/p/5591490.html
Copyright © 2011-2022 走看看