0
我正在編寫一個程序,並且我可以發誓Map返回的值不同於我放入的值。我並不真的相信這是事實,但是我錯過了某些東西我應該在使用地圖時做。返回不同值的C++映射
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()
返回一個唯一的值,因爲「Error」從不打印出來。 - 我還驗證我的地圖包含ID之前我訪問它,因爲,再次,「錯誤」從不打印。
checkGoodMove
驗證從第一狀態和第二狀態的移動是有效的移動。它從來沒有建立我的地圖時,會引發錯誤,但訪問時經常會引發錯誤。
爲什麼我從地圖中獲取隨機狀態,當我處於完全有效的狀態?
您可能正試圖從地圖上讀取不存在的董事會ID。在這種情況下'operator []'的行爲是插入一個默認構造的Board並返回它。嘗試使用'find'代替 –
'auto choice = choices [board.getId()];'如果密鑰不存在,可以將項目添加到地圖。你也可以考慮在那裏使用'find'。 –
我已驗證該ID在我訪問它之前已經在地圖中。將其添加到說明中。 –