为什么列表容器的排序功能不起作用

时间:2016-11-13 18:21:09

标签: c++ sorting stl

我正在尝试列表容器的排序功能,将函数对象和函数指针作为比较函数传递。 但不知何故,功能对象版本没有成功。 l.sort(MylessFuncObj())的输出是:

1
2
3
5
45

虽然我预计输出为1 2 3 45 5.另一件我不太明白的事情是l.sort(MylessFuncObj())l.sort()之前使用它时效果很好。

我刚开始学习cpp,我真的被卡住了..

    #include <list>
    #include <iostream>
    using namespace std;
    class MylessFuncObj
    {
    public:
        bool operator()(const int &a, const int &b){
            return (a%10)<(b%10);
        }

    };
    bool Mylessfunc(const int &a, const int &b){
        return (a%10)<(b%10);
    }

int main()
{
    list<int> l={1, 2, 3, 45,5};
    l.sort(Mylessfunc);
    for(int j:l) cout<<j<<endl;
    l.sort();
    cout<<endl;
    for(int j:l) cout<<j<<endl;
    cout<<endl;
    l.sort(MylessFuncObj());
    for(int j:l)
    cout<<j<<endl;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

45和5根据您的比较函数进行比较,因此它们可以按任何顺序出现。列表排序是稳定的,因此它们将保持原来的顺序。

最初,此订单为45 5,这是您的首次打印应显示的内容。在l.sort()之后(使用默认比较函数),订单变为5 45,使用自定义比较功能的任何其他排序将保留此订单。