[Gelöst] std::set



  • Vielleicht bin ich auch einfach zu müde, aber ich kapiere nicht, wie diese assertion fehlschlagen kann:

    std::set<MyObject> mySet;
    MyObject obj;
    
    /* ... */
    
    if(mySet.find(obj) == mySet.end())
    {
       std::pair<std::set<MyObject>::iterator, bool> ret = mySet.insert(obj);
       assert(ret.second); //die hier
    }
    

  • Mod

    Ist das 1:1 der Code? Nicht, dass es am Ende bloß ein Schreibfehler ist. Ich sehe nämlich ebenfalls nicht, wie das jemals schief gehen könnte.

    Außerdem erschließt sich mir der Sinn des Konstruktion nicht, aber das ist eine andere Sache.



  • Nein, nicht ganz aber fast.
    Originalcode:

    std::set<State>::iterator res = this->states.find(this->curstate);
    if(res == this->states.end())
    {
        std::pair<std::set<State>::iterator, bool> ret = this->states.insert(this->curstate);
        assert(ret.second);
    

    Definition von this->states:

    std::set<State> states;
    

    Definition von this->curstate:

    State curstate;
    

    Edit: Der Sinn ist, zu überprüfen, ob der aktuelle Zustand bereits bearbeitet wurde (in der Liste der bearbeiteten Zustände ist).
    Wenn nicht, wird er bearbeitet und in die Liste eingefügt.



  • Also ich weiß nicht genau, wie er zu so einem Verhalten führen konnte, aber der Fehler lag auf jedem Fall im Vergleichsoperator von State;


Anmelden zum Antworten