0

私は次のクラスを持っています。

class Student {   
    //Parameterized constructor.
    private:
       int rollNo;
       char* name;
       float marks;
 }

私は持っていset<Student> studentsます。セットに学生オブジェクトを挿入するとき、2 つのオブジェクトが同じであることをどのように指定できますか。たとえば、2 つのオブジェクトが同じであり、両方が同じである場合、2 つのオブジェクトが同じであると考えてrollNoStudent s1(10,"ABC",35)ますStudent s2(10,"XYZ",67)。したがって、 and と言うstudents.insert(s1)students.insert(s2)、set には 1 つのオブジェクトしかありませんs1

4

3 に答える 3

0

私がこれを行う方法は、less then 演算子を定義することです.2つの要素のどちらも他の要素よりも小さくない場合、それらは互いに実質的に等しい/同等です.Danielによってリンクされた「元の」スレッドはこれをうまく示しています.

于 2013-11-13T21:39:35.080 に答える
0

operator>フレンドを宣言して定義する必要がありますclass Student

サンプルコード

class Student {
  /* everything you already have */
  public:
  friend bool operator<(const Student& lhs, const Student& rhs);
};

bool operator<(const Student& lhs, const Student& rhs) {
  return lhs.rollNo < rhs.rollNo;
}

比較機能が のプライベート メンバーにアクセスできないため、提供されたソリューションはテルミットが機能しませんclass Student。この問題を解決するにはoperator<、フレンドとして宣言します。フレンド関数 (またはクラス) は、フレンドとして宣言されているクラスのprivateおよびprotectedメンバーにアクセスできます。

于 2013-11-13T21:53:13.423 に答える