C ++ map返回不同的值

时间:2013-12-08 06:04:50

标签: c++

我正在编写一个程序,我可以发誓Map正在返回不同于我输入的值。我实际上并不相信这种情况,但是我错过了在使用时我应该做的事情地图。

choicesstd::map<int,Board>choiceboardBoardgetId()将返回唯一的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;

以下是发生的事情:

  1. 我立刻制作了整张地图。唯一的插入功能就是你看到的功能。
  2. 当我构建地图时,我验证board.getID()返回唯一值,因为“错误”永远不会打印出来。
  3. 在我访问之前,我还验证我的地图是否包含ID,因为再次“永远不会打印”错误。
  4. checkGoodMove验证从第一个州和第二个州的移动是否有效。构建我的地图时永远不会引发错误,但在访问时经常会抛出错误。
  5. 为什么我在地图中得到随机状态,当我在完全有效的状态下?

1 个答案:

答案 0 :(得分:1)

根据提供的代码和OP的正确性断言,问题必须在Board的复制或赋值运算符中。请注意,“自动选择”将选择右侧的副本。你不使用const引用似乎很奇怪

const auto& choice = choices[board.getId()];

并在checkGoodMove中采用相同的方式。

或者,checkGoodMove中的代码有问题。