Wenn ich versuche, Elemente meiner Karte zu löschen, scheint es ein anderes Element zu sein, das stattdessen gelöscht wird. Ich dachte, es war eine schlechte Überschreibung von Operator <, aber ich sehe das Problem nicht.Std :: Karte löschen falsches Element
inline bool operator<(const Etat &et){
if (et.x < this->x){
return false;
}
else if (et.x > this->x){
return true;
}
if (et.y < this->y){
return false;
}
else if (et.y > this->y){
return true;
}
if (et.ry < this->ry){
return false;
}
else if (et.ry > this->ry){
return true;
}
};
Etat Konstruktor:
Etat(x, y, ry, useless, useless);
und die Karte:
std::map< Etat, double > map;
//The 2 last parameters of Etat are useless
map.insert(std::pair< Etat, double >(Etat(2, 2, 2, 0, 0), 0.0));
//map.size() = 1
Etat e (0, 5 ,3, 0, 0);
map.erase(e);
//map.size() = 0
//Etat(2, 2, 2) is gone
Ich habe nicht das Problem für alle Instanz von Etat in der Karte, nur dieser Fall auf und einige Andere.
Testen Sie es zu Hause:
std::map< Etat, double > map;
map.insert(std::pair< Etat, double >(Etat(2, 2, 2, 0, 0), 0.0));
Etat e (0, 5 ,3, 0, 0);
map.erase(e);
Bekommen Sie wirklich nicht a [Warnung] (http://coliru.stacked-crooked.com/a/0454caf5304f2b86) für diesen Code? – chris
Wenn die beiden Elemente gleich sind, stimmt keiner der 'if'-Blöcke überein. – Barmar
ya Ich weiß, weil es unmöglich für sie ist, gleich zu sein – Milow