C++:如何创建 class 的对象的多重集?

C++: How to create a multiset of objects of a class?

这是我的 class 声明:

class Person
{
private:
    string name;

public:
    void showData()
    {
        cout << name << endl;
    }
    void insertData()
    {
        cin >> name;
    }
    bool operator<(Person p)
    {
        return name < p.name;
    }
};

现在我正在尝试创建人 class 的多重对象集,该怎么做? 这是我写的主要功能:

int main()
{
    multiset<Person> m;
    for (int i = 0; i < 6; i++)
    {
        Person p;
        p.insertData();
        m.insert(p);
    }
    multiset<Person>::iterator it;
    // for (it = m.begin(); it != m.end(); it++)
    // {
    //    cout << it.name << endl;
    // }
}

您需要以稍微不同的方式定义您的 operator<。我会将其定义为朋友而不是 class 成员,但如果它是 class 成员,则应该是 const.

这样就可以了

class Person
{
    ...
    bool operator<(Person p) const
    {
        return name < p.name;
    }
};

但我会这样做

class Person
{
    ...
    friend bool operator<(const Person& x, const Person& y)
    {
        return x.name < y.name;
    }
};