根据我的理解,我认为:
我对么?
现在,如果我是正确的,我有以下问题:HashMap
内部使用对象的哈希码.因此,如果两个对象可以具有相同的哈希码,那么它如何HashMap
使用它所使用的键?
有人可以解释HashMap
内部如何使用对象的哈希码吗?
md5散列的字符串的最大长度是多少?或者:如果它没有限制,如果是,那么md5输出值的最大长度是多少?
为什么Git使用加密哈希函数SHA-1而不是更快的非加密哈希函数?
相关问题:
Stack Overflow问题为什么Git使用SHA-1作为版本号?问为什么Git使用SHA-1而不是序列号进行提交.
哈希表被认为是存储/检索数据的最快/最好的方式.
我对哈希表的理解,哈希如下(如果我错了请纠正我或者请添加如果还有更多):
我有个问题:
哈希函数是用于存储/检索数据DIFFERENT来自安全应用程序中使用的加密哈希函数,用于身份验证,如MD5,HMAC,SHA-1等......?
它们以什么方式不同?
如果你能提一些好的链接来更好地理解这些,那就太好了.
我只是发现自己有点吃惊暂时无法简单地用一个
std::unordered_set<std::array<int, 16> > test;
Run Code Online (Sandbox Code Playgroud)
因为s 似乎没有std::hash
专业化std::array
.这是为什么?或者我根本找不到它?如果确实没有,可以简化以下实施尝试吗?
namespace std
{
template<typename T, size_t N>
struct hash<array<T, N> >
{
typedef array<T, N> argument_type;
typedef size_t result_type;
result_type operator()(const argument_type& a) const
{
hash<T> hasher;
result_type h = 0;
for (result_type i = 0; i < N; ++i)
{
h = h * 31 + hasher(a[i]);
}
return h;
}
};
}
Run Code Online (Sandbox Code Playgroud)
我真的觉得这应该成为标准库的一部分.
我需要像这样定义一个unordered_map unordered_map<pair<int, int>, *Foo>
,定义和传递一个hash
和equal
函数到这个地图的语法是什么?
我试过传递给它这个对象:
class pairHash{
public:
long operator()(const pair<int, int> &k) const{
return k.first * 100 + k.second;
}
};
Run Code Online (Sandbox Code Playgroud)
没有运气:
unordered_map<pair<int, int>, int> map = unordered_map<pair<int, int>, int>(1,
*(new pairHash()));
Run Code Online (Sandbox Code Playgroud)
我不知道是什么size_type_Buskets
意思所以我给了它1
.做正确的方法是什么?谢谢.
我需要将一对映射long long
到a double
,但我不确定要使用什么散列函数.每对可以由任意两个数字组成,但在实践中它们通常是介于0
和之间的数字100
(但同样,这是不可保证的).
这是tr1::unordered_map
文档.我开始是这样的:
typedef long long Int;
typedef std::pair<Int, Int> IntPair;
struct IntPairHash {
size_t operator(const IntPair& p) const {
return ...; // how to hash the pair?
}
};
struct IntPairEqual {
bool operator(const IntPair& a, const IntPair& b) const {
return a.first == b.first
&& a.second == b.second;
}
};
tr1::unordered_map<IntPair, double, IntPairHash, IntPairEqual> myMap;
Run Code Online (Sandbox Code Playgroud)
一般来说,我不知道要使用什么哈希函数.什么是一个很好的通用哈希函数?
我目前正在用C++实现一个哈希表,我正在尝试为浮点数创建一个哈希函数...
我打算通过填充十进制数来将浮点数视为整数,但后来我意识到我可能会用大数字来达到溢出...
哈希浮点数是否有好方法?
你不必直接给我这个功能,但我想看/理解不同的概念......
笔记:
我不需要它真的很快,如果可能的话,只是均匀分布.
我已经读过浮点数不应该因为计算的速度而被散列,有人可以确认/解释这个并给我其他原因,为什么浮点数不应该被散列?我真的不明白为什么(除了速度)
我需要在Java中比较实例"File"的两个不同文件,并希望使用快速哈希函数来执行此操作.
想法: - 散列文件1中的20个第一行 - 散列文件2中的20个第一行 - 比较两个散列并返回true(如果它们相等).
我想使用Java中实现的"最快"哈希函数.你会选哪一个?
问题
对于用户定义类型的std :: unordered_map或std :: unordered_set的第三个模板参数,std :: hash有什么好的特殊性,所有成员数据类型都已经具有良好的std :: hash特性?
对于这个问题,我将"好"定义为易于实现和理解,合理有效,并且不太可能产生哈希表冲突.商品的定义不包括任何有关安全性的陈述.
什么是谷歌的状态
目前,两个StackOverflow问题是Google搜索"std hash specialization"的第一个问题.
第一个,如何在无序容器中为用户定义的类型专门化std :: hash :: operator()?,解决了打开std命名空间和添加模板特化是否合法的问题.
第二个,如何专门化来自其他库的类型的std :: hash,基本上解决了同样的问题.
这留下了当前的问题.鉴于C++标准库的实现为标准库中的基本类型和类型定义了散列函数,为用户定义的类型专门化std :: hash的简单有效方法是什么?有没有一种很好的方法来组合标准库实现提供的哈希函数?
(编辑感谢dyp.)StackOverflow的另一个问题是如何组合一对哈希函数.
谷歌的其他结果没有任何帮助.
这篇 Dobbs博士的文章指出,两个令人满意的哈希的XOR将产生一个新的令人满意的哈希值.
这篇文章似乎是从知识中说出并暗示了很多东西,但却注重细节.它与第一个例子中的简短评论中的Dr. Dobbs文章相矛盾,称使用XOR组合散列函数会产生一个弱的结果散列函数.
因为XOR应用于任何两个相等的值导致0,我可以看出为什么XOR本身很弱.
元问题
一个很好的理由回答解释为什么这个问题无效且一般无法回答也是受欢迎的.
hash-function ×10
c++ ×5
c++11 ×2
hash ×2
hashtable ×2
java ×2
arrays ×1
c ×1
comparison ×1
git ×1
hashcode ×1
hashmap ×1
md5 ×1
performance ×1
tr1 ×1