如何根据对象的属性对对象列表进行排序?

时间:2016-03-29 01:41:38

标签: c++ sorting

我正在尝试根据他们的ID对对象列表进行排序。

当我创建一个比较列表中对象的Id的函数时,它会收到错误:

Severity    Code    Description Project File    Line    Suppression State
Error   C3867   'BobControl::compareId': non-standard syntax; use '&' to create a pointer to member list.sort   c:\users\wil\documents\visual studio 2015\projects\list.sort\list.sort\source.cpp   32  

此代码用于测试该问题。

#include <iostream>
#include <list>
#include <string>
using namespace std;

class Bob {
public:
    Bob::Bob(int id) {
        _id = id;
    }
    int getId() const { return _id; }


private:
    int _id = 0;

};     

//testing lists
class BobControl {
public:

    bool compareId(const Bob& first, const Bob& second)
    {
        return (first.getId()  < second.getId());
    }
    void testCompar() {
        bobs.sort(compareId);
    }

    void controlBobs() {
        list<Bob>::iterator lit;
        bobs.push_back(Bob(0));
        bobs.push_back(Bob(1));
        bobs.push_back(Bob(5));
        bobs.push_back(Bob(3));

        testCompar();


        for (lit = bobs.begin(); lit != bobs.end(); lit++) {
            cout << (*lit).getId() << endl;
        }
    }
private:
    list<Bob> bobs;      
};

int main() {

    BobControl bobc;

    bobc.controlBobs();

    system("PAUSE");

    return 0;
}

1 个答案:

答案 0 :(得分:3)

您的compareId()需要是静态功能或独立功能。列表的sort()方法不接受可以调用非静态对象方法的对象。