Что ж, после четырех часов отладки, запутавшись, насколько я мог, я выяснил причину проблемы ...
Я делаю какую-то программу, которая сохраняет некоторую точку в std :: map ивизуализировать их в моем окне.Но странно, некоторые точки не смогли попасть в карту.
std::map<Point2, Prop*> m_Props_m;
void AddProp(std::pair<Point2, Prop*> p)
{
m_Props_m.insert(p);
}
struct Point2
{
unsigned int Point2::x;
unsigned int Point2::y;
//--------
Point2::Point2()
:x(0)
,y(0)
{}
bool Point2::operator< (const Point2& b) const
{
return ( x+y < b.x+b.y );
}
bool Point2::operator> (const Point2& b) const
{
return ( x+y > b.x+b.y );
}
};
Слава богу, у меня есть некоторый опыт работы с бинарными деревьями, чтобы я мог выяснить причину моей проблемы.
Представьте, что мыесть 2 Point2.
Point2 a(0,1);
Point2 b(1,0);
Как вы можете видеть, с оператором <метод, который я написал, он вернул бы false, а оператор> также вернул бы false.Таким образом, если a уже есть на карте, а b вставлено, вставка завершится неудачей.
Теперь все хорошо, но как я могу это исправить?Можно ли как-нибудь использовать оператор «меньше» для 2D-точки, который позволил бы мне сохранять каждую уникальную точку на карте?