我正在尝试使用operator()对指针列表进行排序。它似乎做了正确的比较,只是从来没有真正排序我的列表.. 这是我的分类课程:
class Classifier {
public:
friend bool ClassifyById::operator()(Worker* a, Worker* b);
void Classifier::classify(list<Worker*> toClassify, int method)
{
ClassifyById comparer;
toClassify.sort(comparer);
}
};
我的有operator()的类是:
class ClassifyById {
public:
bool ClassifyById::operator()(Worker* a, Worker* b)
{
return (a->getId() < b->getId());
}
};
现在给出按此顺序插入ID的工作人员列表:
99 11 80 100
我尝试在operator()中打印他们的id(所以你们实际上可以对它进行调试),实际进行比较时,它给了我输出:
11 99
100 80
80 11
80 99
100 99
但最后,当我在排序后打印列表时,它给了我插入它们的顺序,这意味着
99 11 80 100
因此它从未对列表进行实际排序,只是比较了其Id值。 HELP ..?
答案 0 :(得分:2)
通过引用传递列表:
Classifier::classify(list<Worker*> &toClassify, int method)
那就是它。您不希望创建作为参数传递的列表的副本并对其进行排序。这些变化不会反映在通过的列表中。