【发布时间】:2016-11-13 18:21:08
【问题描述】:
我正在尝试列表容器的排序功能,传递一个函数对象和函数指针作为比较函数。
但不知何故,函数对象版本没有成功。
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;
}
【问题讨论】:
-
整数不是按字典顺序排序的……它们是按值排序的……在现实生活中你真的会这样排序吗?
-
您是否尝试过使用相同的一组值初始化列表的不同实例,而不是多次对同一个列表进行排序?
-
它已根据您的排序功能正确排序。为什么你认为 45 必须在 5 之前?
-
嗯,45 mod 10 是 5 而 5 mod 10 是 5。那么根据您的比较函子,为什么您认为 45 小于 5?
-
谢谢大家,我犯了一个错误,再次感谢您对我的第一个 stackoverflow 问题的及时回复!