在C ++中将整数列表表示为单个整数

时间:2013-02-18 00:29:00

标签: c++ hash key

我想将大约100个非负32位整数的列表压缩成一个整数。理想情况下,结果整数始终是唯一的,但可以接受一些相对罕见的碰撞。 我该怎么做?

我正在写一个拼图解算器。我的搜索算法的一部分是避免重新探索已经看到的谜题状态。我将使用列表中生成的整数作为statesAlreadySeen表的密钥。目前我正在使用字符串作为键。但是,当我从map<,>的字符串键变为整数键时,我看到了明显的性能提升,因此我想切换。

修改:感谢您提供无序的地图建议!但是我仍然对实际的散列函数感到好奇。 IIRC有一个简单的功能,涉及基本位操作和xoring。很高兴看到这一点,并对碰撞概率有一些大致的了解。

1 个答案:

答案 0 :(得分:2)

根据评论中的建议,您需要使用哈希函数。最容易通过boost::hash_range完成:

#include <boost/functional/hash.hpp>
std::size_t vectorhash(std::vector<int> f){
    size_t hash = std::size_t hash = boost::hash_range(f.begin(), f.end());
}

话虽如此,如果你没有真正需要保持状态的顺序(我不明白为什么你会这样做),我会采用us2012的解决方案来保持string键并切换到unordered_map - 因此让容器处理散列。