2017-10-24 3 views
0

Ich bin neu in C++ und habe Probleme beim Hinzufügen von Elementen zu einem Satz, Es scheint, dass nur das erste Element hinzugefügt wird. Ich vermute, dass es etwas mit meiner Vergleichsfunktion zu tun hat.C++ Hinzufügen von Elementen zu einem Set

Haupt

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(); 
} 

Mein Vergleich

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

'std :: Set' erfordert eine strenge schwache Ordnung,' == 'nicht erfüllt diese Anforderung, ja vermuten, dass Sie Recht. Aber ich frage mich, warum jemand 'operator <' mit '==' implementiert, wie kommt Ihnen diese Idee in den Sinn? 'return' Left.getID() Slava

+0

wow danke. Wie markiere ich diese Frage als gelöst? –

+0

@MichaelGrinnell: Nicht deine Schuld, Slava legte eine Antwort in den Kommentarraum. Ich werde es kopieren, damit Sie die Antwort markieren können. – MSalters

Antwort

0

std::set erfordert eine strenge schwache Ordnung. (Dies sagt std::set welches Element zuerst kommt). == erfüllt diese Anforderung nicht, ja Sie vermuten, richtig. (a==b entspricht b==a, aber a comes before b bedeutet b comes AFTER a)

return Left.getID() < Right.getID(); ist ziemlich offensichtlich fix.

Angepasst von Slava Kommentar

Verwandte Themen