2017-10-24 9 views
0

私はC++を初めて使用していますが、問題が発生しています。セットにアイテムを追加すると、最初のアイテムだけが追加されているようです。私はそれが私の比較機能と関係があると思う。C++アイテムをセットに追加する

メイン

set<obj> objs; 
objs.insert(obj1); 
objs.insert(obj2); 
objs.insert(obj3); 

cout << objs.size() << endl; //Outputs 1 

for (Obj const& obj: objs) 
{ 
    obj.display(); 
} 

マイ比較

bool operator<(const obj& Left, const obj& Right) 
{ 
    if (Left.getID() == Right.getID()) 
    { 
     return true; 
    } 
    return false; 
} 
+3

'のstd :: set'は厳しい弱い順序付けを必要とし、' == 'その要件を満たしていない、はい、あなたは正しいと思います。しかし、誰かがなぜ '=='で 'operator <'を実装するのだろうと思いますが、そのような考え方はあなたの心にどのようなものがありますか? 'return' Left.getID() Slava

+0

よろしくお願いします。どのように私はこの問題を解決済みと記していますか? –

+0

@MichaelGrinnell:あなたのせいではないが、Slavaはコメント空間に答えを入れた。答えを記入できるようにコピーします。 – MSalters

答えて

0

std::setは厳しい弱い順序付けが必要です。 (これは、最初にどの要素が来るかをstd::setに伝えます)。 ==がその要件を満たしていない場合は、正しいと思われます。 (a==bb==aと同等ですが、a comes before bb comes AFTER aを意味する)

return Left.getID() < Right.getID();はかなり明白修正です。スラバさんのコメントから適応

関連する問題