2016-11-13 66 views
-1

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

1 
2 
3 
5 
45 

虽然我预计产量为1 2 3 45 5.另一件事我不太明白的是,如果l.sort()使用它之前的是l.sort(MylessFuncObj())没有很好地工作。

我刚开始学习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

您是否尝试使用相同的一组值对列表的不同实例进行初始化,而不是多次对相同列表进行排序? – PermanentGuest

+1

它根据您的排序功能正确排序。你为什么认为45岁以前必须5岁? – interjay

回答

1

45和5,根据您的比较函数比较为相等,这样他们就可以以任意顺序出现。列表排序是稳定的,所以它们将保持原来的顺序。

最初,这个订单是45 5,这是你的第一个印刷品应该显示的内容。在l.sort()(使用默认比较功能)之后,订单变为5 45,并且使用您的自定义比较功能进一步分类将保留此订单。

相关问题