I'm writing a checkers engine that takes a position, given by 6 32-bit integers + a boolean, and maps it to a struct that contains legal moves, and visit counts and prior probabilities for these moves.
I originally was using Zorbrist hashing to map the position to a 64-bit integer, and using that as the 'key' for std::unordered_map. This fails because any hash collision will result in the search tree accessing illegal moves and polluting the statistics with garbage information. For this reason I would like to use the entire position, as mentioned above, as the key to the map.
The move information is contained in the following struct
struct move{
std::pair<uint32_t, uint32_t> a;
int n = 0;
double q = 0;
};
The problem is that I can not find a suitable type that will work with unordered map. For instance, trying to use a pair of boost 128-bit integers like so
std::unordered_map<std::pair<boost::uint128_type, boost::uint128_type>, move_data_struct> M;
results in errors that I am not equipped to understand, What type do I put in the first template argument of unordered_map that will accommodate 192 bits of information?