Я пишу решение для простой проблемы программирования, но я не могу заставить map :: find () работать. Я использую карты, чтобы отметить посещенные вершины при использовании BFS. Я знаю, что мог бы использовать какую-то другую структуру данных, такую как двумерный массив bool, но я действительно очень хочу заставить его работать с картами.
Вот мой код: http://pastebin.com/mANej4vp
Проблема в том, что посещенный [tempR] всегда верен, даже если позиция tempR еще не посещена. И visit.size () равен 1, но он отвечает и на посещенные [сейчас], и на посещенные [темпР] как true; пока tempR не равен сейчас.
Файл Duom.in должен содержать это: http://pastebin.com/L7qMG0bd
У вас есть идея, почему это происходит?
Ваш operator<
а также operator==
противоречивы
на две должности
pos p1 = {1, 2, 3, 4};
pos p2 = {1, 10, 20, 30};
bool b1 = !(p1 < p2) && !(p2 < p1);
bool b2 = p1 == p2;
b1
верно, так b2
должно быть верно по определению, но это не так.
Другими словами, переписать свой operator<
сделать правильное сравнение, а не только Hx
Я не отлаживал ваш код, и я действительно не понимаю его, но смысл bool operator<(const pos& a) const
кажется перевернутым для меня.
Учтите, что std :: map использует только тот оператор-член, который должен вернуть this->Hx < a.Hx
по крайней мере, если Hx обозначает положительную координату. И это должно быть Всего порядок, будучи 2D координатами, кажется, что вы должны использовать комбинацию х & в любом случае …