问题描述
|
STL是否具有任何公开公开的哈希函数?
我知道有一些使用哈希值的非标准实现(例如boost :: hash_map),而MSVC8实现了hash_map / hash_set / etc的版本。
但是,C ++ 98 STL中是否定义了任何哈希函数?
如果不是,那么可靠散列函数的最佳非C ++ 98来源是什么?
首选来源的顺序(从最高到最低):Boost,C ++ 0x标准STL,TR1,其他第三方。
解决方法
总结一下:
STL具有哈希功能
C ++ 98标准库不
C ++ TR1具有哈希函数(
6.3.3[tr.unord.hash]
)
boost具有哈希功能
C ++ 11标准库具有哈希函数(20.8.12[unord.hash]
)
而且所有这些都是为哈希关联容器而不是密码术设计的。
,我猜您正在寻找哈希表的哈希函数,而不是密码算法,对吗?
在那种情况下,boost :: hash呢?
该文档说它与TR1哈希兼容,后者应该成为即将到来的C ++ 0x标准的一部分。这意味着它可能已经在许多编译器中找到。
对于密码散列,Boost中似乎有SHA-1实现,但是如果需要重量级散列,最好的方法是使用专用库,例如Crypto ++。
,哈希函数的选择理想地取决于您对结果的使用。我怀疑这可能部分是由于“一种尺寸不能适应所有尺寸”的想法。