C ++ STL map :: find () проблемы

Я пишу решение для простой проблемы программирования, но я не могу заставить map :: find () работать. Я использую карты, чтобы отметить посещенные вершины при использовании BFS. Я знаю, что мог бы использовать какую-то другую структуру данных, такую ​​как двумерный массив bool, но я действительно очень хочу заставить его работать с картами.
Вот мой код: http://pastebin.com/mANej4vp

Проблема в том, что посещенный [tempR] всегда верен, даже если позиция tempR еще не посещена. И visit.size () равен 1, но он отвечает и на посещенные [сейчас], и на посещенные [темпР] как true; пока tempR не равен сейчас.

Файл Duom.in должен содержать это: http://pastebin.com/L7qMG0bd

У вас есть идея, почему это происходит?

-2

Решение

Ваш 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

3

Другие решения

Я не отлаживал ваш код, и я действительно не понимаю его, но смысл bool operator<(const pos& a) const кажется перевернутым для меня.

Учтите, что std :: map использует только тот оператор-член, который должен вернуть this->Hx < a.Hxпо крайней мере, если Hx обозначает положительную координату. И это должно быть Всего порядок, будучи 2D координатами, кажется, что вы должны использовать комбинацию х & в любом случае …

2