好 我喜欢这个小蝙蝠
vector list map 这些结构的使用率比较高 看看如何定制其排序
1 vector
vector是无序结构 可以使用标准算法std::sort方法来排序 查看sort的源码可以了解到
sort算法总体是采用快速排序 局部采用插入排序 效率良好 通过指定sort的第3个参数
一个函数对象的实例 我们可以定制排序行为 让其从大到小或从小到大 我们看例子:
1 class SortMethod
2 {
3 public:
4 bool operator()(int a,int b) const
5 {
6 return a<b;
7 }
8 };
9
10 int main()
11 {
12
13 vector<int> v;
14 v.push_back(5);
15 v.push_back(8);
16 v.push_back(2);
17 std::sort(v.begin(),v.end(),SortMethod());
18
19 return 0;
20 }
如果要让其按反序排列 修改重载函数为 return a>b 如果没有提供第3个参数
默认是std::less<>() 该类是重载了()操作符的模板类 效果和SortMethod类似
现在我们的数据类型是int 如果是class或者struct且接受默认比较函数对象
就得在类中实现重载<操作符 看例子:
class yezhu
{
public:
yezhu():i(0){cout<<"I'm yezhu "<<i<<endl;}
~yezhu(){cout<<"del yezhu "<<i<<endl;}
yezhu(int n):i(n){cout<<"I'm yezhu "<<i<<endl;}
void setValue(int n){i=n;}
int getValue() const{return i;}
bool operator<(const yezhu& val) const
{
return i<val.i;
}
protected:
int i;
};
int main()
{
vector<yezhu> v;
v.push_back(yezhu(3));
v.push_back(yezhu(2));
v.push_back(yezhu(1));
std::sort(v.begin(),v.end());
return 0;
}
2.list
list有自己的sort函数 有一个可选参数 默认是std::less<>() 不能用标准sort()函数排序
3.map
map是有序结构 在其构造的时候可以指定比较函数对象 注意 这里提供的不是实例 而是类型
int main()
{
map<int,char,greater<int>> m;
return 0;
}
posted on 2010-06-27 16:35
野猪红 阅读(568)
评论(0) 编辑 收藏 引用 所属分类:
C/C++ STL Python Lua