gpt4 book ai didi

C++ 映射返回不同的值

转载 作者:行者123 更新时间:2023-11-28 07:14:27 25 4
gpt4 key购买 nike

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

choicesstd::map<int,Board> , choiceboardBoard , 和 getId()将返回一个唯一的 int 散列。

这是我生成代码的一部分(当我构建我的 map 时):

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));

然后,这是我访问 map 时的代码:

if (choices.find(board.getId())==choices.end())
std::cout<<"Error!"<<std::endl;
auto choice = choices[board.getId()];
checkGoodMove(board, choice);
return choice;

这是发生了什么:

  1. 我一次构建了整个 map 。唯一的插入功能是您看到的那个。
  2. 当我构建 map 时,我会验证 board.getID()返回一个唯一值,因为永远不会打印出“错误”。
  3. 我还会在访问之前验证我的 map 是否包含 ID,因为再一次,“错误”永远不会打印出来。
  4. checkGoodMove验证从第一个状态到第二个状态的移动是有效的移动。它从不在构建我的 map 时抛出错误,但在访问时会经常抛出错误。

当我输入完全有效的状态时,为什么我从 map 中得到随机状态?

最佳答案

根据提供的代码和 OP 的正确性断言,问题一定出在 Board 的复制或赋值运算符中。请注意,“自动选择”将使选择成为右侧的拷贝。您不使用 const 引用似乎很奇怪

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

并在 checkGoodMove 中以相同的方式进行论证。

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

关于C++ 映射返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20450443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com