您的位置:首页 > 其它

std list/vector sort 自定义类的排序

2017-01-17 11:20 357 查看
转载自:http://blog.csdn.net/marising/article/details/4567531

如下:三种方式都可以,如重写<,()和写比较函数compare_index。但是要注意对象和对象指针的排序区别。

1、容器中是对象时,用操作符<或者比较函数,比较函数参数是引用。

2、容器中是对象指针时,用()和比较函数排序都可以,比较函数参数是指针。

3、list用成员方法sort

4、vector用sort函数

 

[cpp] view
plain copy

class TestIndex{  

public:  

    int index;  

    TestIndex(){  

    }  

    TestIndex(int _index):index(_index){  

    }  

    bool operator()(const TestIndex* t1,const TestIndex* t2){  

        printf("Operator():%d,%d/n",t1->index,t2->index);  

        return t1->index < t2->index;  

    }  

    bool operator < (const TestIndex& ti) const {  

        printf("Operator<:%d/n",ti.index);  

        return index < ti.index;  

    }  

};  

bool compare_index(const TestIndex* t1,const TestIndex* t2){  

    printf("CompareIndex:%d,%d/n",t1->index,t2->index);  

    return t1->index < t2->index;  

}  

int main(int argc, char** argv) {  

    list<TestIndex*> tiList1;  

    list<TestIndex> tiList2;  

    vector<TestIndex*> tiVec1;  

    vector<TestIndex> tiVec2;  

    TestIndex* t1 = new TestIndex(2);  

    TestIndex* t2 = new TestIndex(1);  

    TestIndex* t3 = new TestIndex(3);  

    tiList1.push_back(t1);  

    tiList1.push_back(t2);  

    tiList1.push_back(t3);  

    tiList2.push_back(*t1);  

    tiList2.push_back(*t2);  

    tiList2.push_back(*t3);  

    tiVec1.push_back(t1);  

    tiVec1.push_back(t2);  

    tiVec1.push_back(t3);  

    tiVec2.push_back(*t1);  

    tiVec2.push_back(*t2);  

    tiVec2.push_back(*t3);  

    printf("tiList1.sort()/n");  

    tiList1.sort();//无法正确排序  

    printf("tiList2.sort()/n");  

    tiList2.sort();//用<比较  

    printf("tiList1.sort(TestIndex())/n");  

    tiList1.sort(TestIndex());//用()比较  

    printf("sort(tiVec1.begin(),tiVec1.end())/n");  

    sort(tiVec1.begin(),tiVec1.end());//无法正确排序  

    printf("sort(tiVec2.begin(),tiVec2.end())/n");  

    sort(tiVec2.begin(),tiVec2.end());//用<比较  

    printf("sort(tiVec1.begin(),tiVec1.end(),TestIndex())/n");  

    sort(tiVec1.begin(),tiVec1.end(),TestIndex());//用()比较  

    printf("sort(tiVec1.begin(),tiVec1.end(),compare_index)/n");  

    sort(tiVec1.begin(),tiVec1.end(),compare_index);//用compare_index比较  

    return 0;  

} 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sort vector list