Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的任何内置哈希方法+;? 我正在寻找C++的MD5,我意识到MD5不是内置的(即使有很多非常好的库来支持MD5函数)。然后,我意识到我实际上不需要md5,任何哈希方法都可以。因此,我想知道C++是否具有这样的功能?我是说,内置的散列函数 P>我研究C++时,我看到java、PHP和其他一些编程语言支持MD5。例如,在PHP中,您只需要调用:md5(“您的字符串”)_C++_Function_Hash - Fatal编程技术网

C+中的任何内置哈希方法+;? 我正在寻找C++的MD5,我意识到MD5不是内置的(即使有很多非常好的库来支持MD5函数)。然后,我意识到我实际上不需要md5,任何哈希方法都可以。因此,我想知道C++是否具有这样的功能?我是说,内置的散列函数 P>我研究C++时,我看到java、PHP和其他一些编程语言支持MD5。例如,在PHP中,您只需要调用:md5(“您的字符串”)

C+中的任何内置哈希方法+;? 我正在寻找C++的MD5,我意识到MD5不是内置的(即使有很多非常好的库来支持MD5函数)。然后,我意识到我实际上不需要md5,任何哈希方法都可以。因此,我想知道C++是否具有这样的功能?我是说,内置的散列函数 P>我研究C++时,我看到java、PHP和其他一些编程语言支持MD5。例如,在PHP中,您只需要调用:md5(“您的字符串”),c++,function,hash,C++,Function,Hash,一个简单的散列函数就可以了。(如果可能,请提供一些关于如何使用它的简单代码。)如何使用boost,这很简单。使用C++11,您将获得一个 hash<string> 接受下面的评论。为了防止短字符串聚集,您可能需要以不同的方式初始化h。也许你可以使用长度(但这只是我的第一个想法,未经证实): size\u t h=数值限制::max()/(s.length()+1);//+1:没有0的div-by-0 ... 这不应该比以前更糟,但仍然远远不够完美。< /P> < P>这取决于你有

一个简单的散列函数就可以了。(如果可能,请提供一些关于如何使用它的简单代码。)

如何使用boost,

这很简单。使用C++11,您将获得一个

hash<string>
接受下面的评论。为了防止短字符串聚集,您可能需要以不同的方式初始化
h
。也许你可以使用长度(但这只是我的第一个想法,未经证实):

size\u t h=数值限制::max()/(s.length()+1);//+1:没有0的div-by-0
...

<>这不应该比以前更糟,但仍然远远不够完美。< /P> < P>这取决于你有哪个版本的C++…你要找的是什么样的散列函数

C++03没有任何哈希容器,因此不需要哈希。不过,许多编译器已经提出了自定义头的建议。否则Boost.Functional.Hash可能会有所帮助

C++ 0x有“容器代码”>“无序”< /COD>容器族,因此是<>代码> STD::hash < /COD>谓词,它已经为C++标准类型(内置类型和 STD::String )工作。 然而,这是一个简单的散列,对于散列映射来说已经足够好了,而不是安全性

如果您正在寻找加密散列,那么问题就完全不同了(md5非常糟糕),您需要一个库来(例如)存储SHA-2散列


如果你正在寻找速度,请查看和。两者都有限制,但都经过了大量优化。

因此您可以添加
哈希
专门化?@xtofl:是的,它是用来作为当前的
std::less
,但用于哈希映射。或者,您可以简单地将自定义谓词传递给给定的哈希映射。crc32如何?要求一个“散列方法”是相当模糊的。您需要加密哈希吗?或者您只是在尝试为集合编制索引?您需要抵抗算法复杂性攻击吗?请注意,当有大量非常短的字符串时,此哈希函数倾向于聚集。(不是经常发生,而且在大多数情况下都相当不错。)@JamesKanze你觉得我对初始化h的看法如何?不是初始化导致聚类,而是小乘数。我通常使用
127
,但今天可能需要更大的素数。(显然,如果字符串中有
'\0'
字节,则不应使用
0
进行初始化;所有
'\0'
字节的字符串将散列为相同的值,而不管长度如何。但这通常不是问题。)
hash<string> h;
const size_t value = h("mystring");
size_t h = 0
for(int i=0; i<s.size(); ++i)
    h = h*31 + s[i];
return h;
size_t h = numeric_limits::max<size_t>() / (s.length()+1); // +1: no div-by-0
...