私はちょっと難しいことにこれを必要とするので、これがどのように機能するのかを理解するためのミニプログラムを作成するだけですが、この作業を行うことはできません。セットのオーバーロード演算子
私は演算子オーバーロードを定義する必要がありますが、私は、彼らがset<set<a>>
の二つのオブジェクトであるため、コンパイルした場合、あなたはそれが彼がmyset == myset2
を比較することはできませんと私は考えていることがわかり、大きなエラーが表示されます方法を知ってはいけないと思います
それは、デフォルトでは、コンパイラによって生成される(デフォルトoperator=(const T&)
とoperator=(T&&)
を除く)いいえ演算子演算子!=
と=
#include <set>
using namespace std;
class a{
private:
int a_;
public:
int get_a() const{ return a_; }
void set_a(int aux){ a_=aux;}
bool operator < (const a& t) const{
return this->get_a() < t.get_a();
}
};
class b{
private:
set<set<a> > b_;
public:
void set_(set<a> aux){ b_.insert(aux); }
//Overload operators?
};
int main(){
b myset;
b myset2;
set<a> subset1;
set<a> subset2;
a myint;
myint.set_a(1);
subset1.insert(myint);
myint.set_a(2);
subset1.insert(myint);
myint.set_a(3);
subset1.insert(myint);
myint.set_a(5);
subset2.insert(myint);
myint.set_a(6);
subset2.insert(myint);
myint.set_a(7);
subset2.insert(myint);
myset.set_(subset1);
myset.set_(subset2);
myset2.set_(subset1);
myset2.set_(subset2);
if(myset == myset2){
cout << "They are equal" << endl;
}
if(myset != myset2){
cout << "They are different" << endl;
}
b myset3;
myset3 = myset2; //Copy one into other
}
ほとんど正しいです。適切な演算子を実装しない限り、( '=='、 '!='、 '<'、etc ...)オブジェクトを比較することはできません。デフォルト代入演算子が生成されるので、依然として( '=')を代入することができます。このデフォルトの '='は、すべての場合にあなたが望むことをしないかもしれません。 [3のルールとは何ですか?](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)を参照してください。すべての場合、デフォルトの '=それを避ける方法。 – user4581301