0
点赞
收藏
分享

微信扫一扫

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


举报

相关推荐

0 条评论