博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 

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方法?目前还不知道。

 

posted on 2010-03-13 01:25  Likwo  阅读(6299)  评论(0编辑  收藏  举报