zoukankan      html  css  js  c++  java
  • stl sort使用经验

     

    1.list 里有个方法sort方法。注意Vector很多方法和list一样,但是,这个方法Vector是没有的。

      (1).整型数据排序

       void ListSortTest()
    {
        list<int> num;
        num.push_back( 1 );
        num.push_back( 3 );
        num.push_back( 2 );
        num.push_back( 9 );
        num.push_back( 5 );
        num.sort();
        list<int>::iterator vi;
        for( vi=num.begin();vi!=num.end();vi++)
        {
            cout  << *vi << endl;
        }
    }

    (2).对象排序。因为list.sort()默认排序需要重载<操作符。所以我们必须在类对象里重载这个操作符。例子如下:

    class student
     {
        
    public:
          
    int age;
          student()
          {}
          student(
    int a)
          {
              
    this->age=a;
          }
      
    public:
          
    bool operator < (student b)
         {
               
    return this->age < b.age;
         }

         bool operator > (student b)
         {
               
    return this->age > b.age;
         }

     }; 

    测试函数

    void ListSortTest()
    {
        list
    <student> num;
        num.push_back( student(
    1) );
        num.push_back( student(
    5));
        num.push_back( student(
    2));
        num.push_back( student(
    6));
        num.sort();
       
    // sort(num.begin(),num.end());
        list<student>::iterator vi;

        
    for( vi=num.begin();vi!=num.end();vi++)
        {
            cout  
    << vi->age << endl;
        }
        num.clear();
        
    }

      事实上,list有两个版本的sort成员函数:  
      一个是不带参数的sort(),用来实现升序排列;  
      另一个是带参数的sort(greater<T>   pr),用来实现降序排列。  
      后者的greater实际上是被VC实作好的一个二元函数(binary   funtion)对象,  
      参见VC下的源程序:  
      template<class   _Ty>  
      struct   greater   :   binary_function<_Ty,   _Ty,   bool>   {  
      bool   operator()(const   _Ty&   _X,   const   _Ty&   _Y)   const  
      {return   (_X   >   _Y);   }  
      };  
      而这个二元函数的成员操作符()将会调用其参数所对应的数据类型(这里正是student)的">"运算符进行相互比较。  

    void ListSortTest()
    {
        list
    <student> num;
        num.push_back( student(
    1) );
        num.push_back( student(
    5));
        num.push_back( student(
    2));
        num.push_back( student(
    6));
        list
    <student>::iterator vi;
      greater
    <student> pt;
      num.sort(pt);

        
    for( vi=num.begin();vi!=num.end();vi++)
        {
            cout  
    << vi->age << endl;
        }
        num.clear();
        
    }


    List<string>要进行排序的话,就不能这么排序。我原先以为是不能排序,后来发现是没有引用都文件,如果包含头文件sting后,就能够使用了。

    2. Algorithms的Sort方法

    void sort( iterator start, iterator end );

    void sort( iterator start, iterator end, StrictWeakOrdering cmp );

    bool cmp(int a,int b)
    {
        return a > b;

    void VectorTest()
    {
        vector<int> num;
        num.push_back( 1 );
        num.push_back( 2 );
        num.push_back( 3 );
        num.push_back( 2 );
        num.push_back( 9 );
        num.push_back( 5 );
        sort(num.begin(),num.end());
        
        sort(num.begin(),num.end(),cmp);
        vector<int>::iterator vi;

        for( vi=num.begin();vi!=num.end();vi++)
        {
            cout  << *vi << endl;
        }

    }

    而这也就实现了Vector的排序功能。

    list如何实现Algorithms里的sort方法?目前还不知道。

  • 相关阅读:
    eVC4系列下载地址[更新](增加sp4)
    ABAP如何生成年月的输入帮助
    BW BW Connectivity(最佳实践适合BW3.5)
    MM公司委托加工流程
    ABAP一个读取EXCEL单元格的内容超过256个字符的代码样例
    ABAP如何实现合计字段分单位合计
    ABAPABAP程序员需要参加的课程
    ABAP关于ABAP Dictionary的一些简单问题
    FI分期收款发出商品物料数据(仅供参考)
    ABAP关于abap的subroutines的几个注意点
  • 原文地址:https://www.cnblogs.com/likwo/p/1684876.html
Copyright © 2011-2022 走看看