我正在编写一个程序,我可以发誓Map正在返回不同于我输入的值。我实际上并不相信这种情况,但是我错过了在使用时我应该做的事情地图。
choices
是std::map<int,Board>
,choice
,board
是Board
,getId()
将返回唯一的int哈希。
这是我代代码的一部分(当我构建我的地图时):
if (choices.find(board.getId())!=choices.end())//If choices already contains the new state
std::cout<<"Error!"<<std::endl;
checkGoodMove(board,choice);
choices.insert(std::pair<int,Board>(board.getId(),choice));
然后,这是我访问我的地图时的代码:
if (choices.find(board.getId())==choices.end())
std::cout<<"Error!"<<std::endl;
auto choice = choices[board.getId()];
checkGoodMove(board, choice);
return choice;
以下是发生的事情:
board.getID()
返回唯一值,因为“错误”永远不会打印出来。checkGoodMove
验证从第一个州和第二个州的移动是否有效。构建我的地图时永远不会引发错误,但在访问时经常会抛出错误。为什么我在地图中得到随机状态,当我在完全有效的状态下?
答案 0 :(得分:1)
根据提供的代码和OP的正确性断言,问题必须在Board的复制或赋值运算符中。请注意,“自动选择”将选择右侧的副本。你不使用const引用似乎很奇怪
const auto& choice = choices[board.getId()];
并在checkGoodMove中采用相同的方式。
或者,checkGoodMove中的代码有问题。