Я пишу алгоритм C++ для решения настольной игры. Решение основано на следующем:std :: set с непоследовательным оператором <
enqueue initial board
while queue not empty:
dequeue a board
if board is solved:
print solution
else:
for each possible board that can arise out of this one:
add board to end of queue
Поскольку я не хочу, чтобы изучить ту же доску более чем один раз, я использую std::set<Board>
следить за рассмотренных плат.
В Board
класс bool operator<(const Board& rhs) const
предназначен для правильной работы std::set
.
Итак, что происходит в моем std::set
, если моя функция сравнения не гарантирует порядок в экземплярах платы?
В качестве примера:
a = Board()
b = Board()
c = Board()
a > b returns true
b > c returns true
a > c returns false
Возможно ли, что std::set
, так как он основан на Красно-черное дерево, вставляет тот же совет несколько раз?
if 'operator <' не работает как правильный компаратор - поведение контейнера не определено и специфично для реализации – Hcorg
Поскольку программа не определена, все может произойти. – molbdnilo
Чтобы добавить к сказанному, если вы используете Visual C++, время выполнения отладки проверяет это и будет терпеть неудачу с помощью assert(), если вы сделали что-то похожее на то, что вы опубликовали. Итак, для среды выполнения отладки Visual C++ поведение «четко определено» - ваша программа будет 'assert()' и выйти. – PaulMcKenzie