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;
}
};
测试函数
{
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)的">"运算符进行相互比较。
{
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方法?目前还不知道。