C++ STL哈希函数

C++ STL哈希函数,c++,algorithm,boost,stl,cryptography,C++,Algorithm,Boost,Stl,Cryptography,STL是否有公开的哈希函数 我知道有些非标准实现使用哈希值(如boost::hash_-map),而MSVC8实现了hash_-map/hash_-set/etc的一个版本 但是在C++98 STL中是否定义了任何散列函数 如果不是,那么可靠的散列函数的最佳非C++98源是什么 首选源的顺序(从最可接受到最不可接受):Boost、C++0x标准STL、TR1、其他第三方。我猜您是在寻找哈希表的哈希函数,而不是密码,对吗 那样的话,你呢 文档中说它与TR1散列兼容,TR1散列应该成为即将到来的C+

STL是否有公开的哈希函数

我知道有些非标准实现使用哈希值(如boost::hash_-map),而MSVC8实现了hash_-map/hash_-set/etc的一个版本

但是在C++98 STL中是否定义了任何散列函数

如果不是,那么可靠的散列函数的最佳非C++98源是什么


首选源的顺序(从最可接受到最不可接受):Boost、C++0x标准STL、TR1、其他第三方。

我猜您是在寻找哈希表的哈希函数,而不是密码,对吗

那样的话,你呢

文档中说它与TR1散列兼容,TR1散列应该成为即将到来的C++0x标准的一部分。这意味着它可能已经在很多编译器中找到了

对于加密散列,Boost中似乎有一个SHA-1实现,但如果您需要重量级的实现,则可以使用专用库,例如。

来总结:

  • STL有
  • C++98标准库没有
  • C++ Tr1具有(<代码> 6.3.3[ Tr.unord.hash ] < /C> >)
  • 助推
  • C++11标准库有(
    20.8.12[unord.hash]

所有这些函数都是为哈希关联容器而设计的,而不是为加密而设计的。

理想情况下,哈希函数的选择取决于您对结果的使用。我怀疑这可能部分是因为“一种尺寸不能适合所有人”的想法。实际上,这是因为晶体的原因。我会更新这个问题的标签。好吧,如果你已经在使用boost,它似乎已经有了。否则,您可以使用类似SHA-1的加密库,它位于
detail
命名空间中,这意味着它不打算在
boost.uuids
之外使用。我们必须等待boost.crypto,它可能正在等待boost.mp_math,或者我们可以使用单独的库进行加密。我知道我知道。C++98不包含任何哈希容器,所以它自然不包含任何哈希函数。我相信第一点是不正确的。STL没有哈希函数。您发布到SGI的STL实现的链接具体引用“这个类是SGI扩展;它不是C++标准的一部分”,因为C++ 98/Tr1/11标准LabBy也是STL,更确切地说SGI STL实现具有它们,Tr1 STL具有它们,C++ 0x/11实现有它们,一些编译器已经实现了它们,STL也实现了它们(IIRC、VC++已经有很长一段时间了,STLport也有)。它们看起来或多或少是可互换的,但它们之间的差异可能有一些细微的细节,因此您应该真正寻找一个与C++0x兼容的实现,以获得最大的兼容性。@J T:这有点向后看。(HP/SGI)STL在C++98之前就已经存在,并且在当时具有哈希函数。并不是STL的所有部分都能进入C++98;SGI随后将其记录为“标准的扩展”。有关更多详细信息,请参阅马特·奥斯特恩的STL手册。@Boaz Yaniv:这里有一个很好的答案:我注意到您在C++11中引用了N3242。就在今天,最终的C++11草案发布了,N3290:。