【问题标题】:C++: How to create a multiset of objects of a class?C++:如何创建一个类的多组对象?
【发布时间】:2021-03-30 23:41:51
【问题描述】:

这是我的班级声明:

class Person
{
private:
    string name;

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

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

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;
    // }
}

【问题讨论】:

标签: c++ class stl multiset


【解决方案1】:

您需要以稍微不同的方式定义您的operator&lt;。我会将它定义为朋友而不是班级成员,但如果它是班级成员,则应该是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;
    }
};

【讨论】:

  • 即使它不是朋友,参数也应该是一个常量引用。没有理由为了进行比较而复制对象。
猜你喜欢
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 2022-06-15
  • 2013-03-04
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多