我正在尝试列表容器的排序功能,将函数对象和函数指针作为比较函数传递。
但不知何故,功能对象版本没有成功。
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;
}
答案 0 :(得分:1)
45和5根据您的比较函数进行比较,因此它们可以按任何顺序出现。列表排序是稳定的,因此它们将保持原来的顺序。
最初,此订单为45 5
,这是您的首次打印应显示的内容。在l.sort()
之后(使用默认比较函数),订单变为5 45
,使用自定义比较功能的任何其他排序将保留此订单。