C++中的任何内置哈希方法
Any built in hash method in C++?
我在为C++寻找md5,我意识到md5不是内置的(尽管有很多非常好的库支持md5函数)。然后,我意识到我实际上并不需要md5,任何哈希方法都可以。因此,我想知道C++是否有这样的功能?我的意思是,内置哈希函数?
当我研究C++时,我发现Java、PHP和其他一些编程语言支持md5。例如,在PHP中,您只需要调用:md5("your string");
。
一个简单的散列函数就可以了。(如果可能的话,请包括一些关于如何使用它的简单代码。)
这很简单。使用C++11可以获得
hash<string>
函子,你可以这样使用(未经测试,但给了你想法):
hash<string> h;
const size_t value = h("mystring");
如果你没有C++11,看看boost,也许是boost::tr1::hash_map
。它们可能也提供了字符串哈希函数。
对于非常简单的情况,你可以从以下几点开始:
size_t h = 0
for(int i=0; i<s.size(); ++i)
h = h*31 + s[i];
return h;
接受下面的评论。为了防止短字符串聚集,您可能需要以不同的方式初始化h
。也许你可以使用长度(但这只是我的第一个想法,未经证实):
size_t h = numeric_limits::max<size_t>() / (s.length()+1); // +1: no div-by-0
...
这应该不会比以前更糟,但还远远不够完美。
这取决于您拥有的C++版本。。。以及你正在寻找什么样的哈希函数。
C++03没有任何散列容器,因此不需要散列。不过,许多编译器已经提出了自定义头。否则,Boost.Functional.Hash可能会有所帮助。
C++0x有unordered_
容器家族,因此有一个std::hash
谓词,它已经适用于C++标准类型(至少是内置类型和std::string
)。
然而,这是一个简单的散列,对于散列映射来说足够好,不适合安全。
如果你正在寻找加密哈希,那么问题就完全不同了(md5是loosy),你需要一个用于(例如)SHA-2哈希的库。
如果您正在寻找速度,请查看CityHash和MurmurHash。两者都有限制,但都经过了大量优化。
如何使用boost,boost.Functional/Hash
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 使用Qt C++计算类似Git的SHA1哈希
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- c++找不到具有相同哈希的无序集合元素
- 哈希文件递归并保存到矢量Cryptopp中
- 对 pair<pair<int,int>pair<int,int unordered_map进行哈希处理>>
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 给定哈希函数解码消息的最佳方法是什么
- C++,在哈希表中显示内容的方法.使用双链表
- 在C++中实现哈希旋转方法的最佳方式是什么
- 为密码哈希函数生成Salt的已接受方法-C++
- C++中的简单哈希方法
- 从两个浮点向量生成哈希的最佳方法
- C++ 哈希表使用链接、删除方法
- 我不确定这个前缀哈希方法应该做什么
- C++中的任何内置哈希方法
- 在我的情况下,我如何重载相等的方法以使不同的对象在unordered_multimap具有相同的哈希码值
- 对不太长的字符串向量 (urls) 进行哈希处理的最佳方法是什么?