list :: sort using operator()c ++短代码

时间:2015-12-06 19:26:18

标签: c++ list sorting pointers operators

我正在尝试使用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 ..?

1 个答案:

答案 0 :(得分:2)

通过引用传递列表:

Classifier::classify(list<Worker*> &toClassify, int method)

那就是它。您不希望创建作为参数传递的列表的副本并对其进行排序。这些变化不会反映在通过的列表中。