好 我喜欢这个小蝙蝠
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 野猪红 阅读(559) 评论(0)  编辑 收藏 引用 所属分类: C/C++ STL Python Lua

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理