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

How to sort a list of objects based on their properties?

本文关键字:对象 列表 排序 属性 何根      更新时间:2023-10-16

我正在尝试根据对象的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:userswildocumentsvisual studio 2015projectslist.sortlist.sortsource.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;
}

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