我在C#中有一个结构:
public struct UserInfo
{
public string str1
{
get;
set;
}
public string str2
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的规则是 UserInfo(str1="AA", str2="BB").Equals(UserInfo(str1="BB", str2="AA"))
如何覆盖此结构的GetHashCode函数?
如果我们具有以下优先级(按此顺序),那么最好的散列算法是什么:
它不必是安全的.基本上我正在尝试基于某些对象的属性组合创建索引.所有属性都是字符串.
任何对c#实现的引用都将不胜感激.
我发现VS2005上的标准哈希函数在尝试实现高性能查找时非常缓慢.有哪些快速有效的哈希算法可以解决大多数冲突的好例子?
我在用map<MyStruct, I*> map1;.显然,我总应用时间的9%用于那里.特别是我的一个主要职能的一行.地图不是很大(<1k几乎总是,<20是常见的).
是否有我可能想要使用的替代实现?我想我不应该写自己的,但如果我认为这是一个好主意我可以.
附加信息:我总是在添加元素之前检查.如果存在密钥,我需要报告问题.在一点之后,我将大量使用地图进行查找,并且不会再添加任何元素.
感兴趣的领域是字符串匹配.假设我有这样的结构.
typedef struct
{
char *name,
int (*function)();
} StringArray
StringArray s[] =
{
{"George", func1},
{"Paul", func2},
{"Ringo", func3},
{"John", func4},
{"", NULL} /* End of list */
}
Run Code Online (Sandbox Code Playgroud)
数组中有固定数量的字符串.它们是硬编码的,如示例中所示.如果表发生变化,则需要重新评估散列函数的质量.
我想将哈希函数应用于字符串,如果字符串与数组中的字符串匹配,则调用该函数.这需要一个完美的哈希函数.不允许冲突.要求散列的目的是在查找上获得O(1)性能.
您在设计功能时有什么想法?
制作std :: unordered_set CASE-INSENSITIVE容器的最短,最跨平台的方法是什么?
my_set.insert("Apples");
my_set.insert("apples"); //Insert doesn't occur because of duplicate item
Run Code Online (Sandbox Code Playgroud)
我知道STL提供Hash和Pred.我应该散列是什么?Pred应该是什么?如果它们不是内置的,那么请提供它们的代码以及它们的使用示例(即我如何声明std::unordered_set?).
由于批评,我将详细说明我要做的事情.我需要一个高性能的透明HTTP代理服务器,它所做的一件事就是快速查找HTTP头字段.HTTP头字段被定义为不区分大小写,因此我需要一个不区分大小写的容器.
我试图通过散列一些节点指针来加速特定的链表操作.这是我正在使用的代码:
unordered_set< typename list< int >::iterator > myhashset;
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2012中,我收到"错误C2338:C++标准不提供此类型的哈希",因为编译器不知道如何散列迭代器.因此,我需要为列表迭代器实现我自己的哈希函数,如下所示:
struct X{int i,j,k;};
struct hash_X{
size_t operator()(const X &x) const{
return hash<int>()(x.i) ^ hash<int>()(x.j) ^ hash<int>()(x.k);
}
};
Run Code Online (Sandbox Code Playgroud)
(维基百科参考)
我无法弄清楚迭代器的哪些成员保证唯一性(因此,我想要哈希的成员).另一个问题是那些成员可能是私人的.
想到的一个解决方案是重新实现和list :: iterator,但这看起来像是一个hack并引入了更多的代码来维护.
我正在创建一个脚本,其中包含名称和电子邮件地址列表,并发送一封电子邮件邀请他们注册我们部门的安全网站.名称和电子邮件列表可在同一站点的公共页面上找到.我需要一种方法来为他们提供一个唯一的令牌,当他们按照电子邮件中的链接注册帐户时会识别他们.用户只会使用一次令牌,以创建帐户并设置其初始密码.
什么是生成令牌的最佳方法?存储在数据库中的随机字符串?从用户信息和一些盐生成的哈希?别的什么?我知道这种方法的安全性取决于个人电子邮件邀请的隐私,这是我理解的一点点.
我试图为10或16字节的字符串创建一个哈希.这些字符串是以太网mac地址+ ip地址(6 + 4字节)或只是ipv6 ip(16字节).
理想情况下,我想保留蛋糕并吃掉它.绝对最小碰撞将是优先事项.散列长度必须小于16个字节并且相当快.<O(n ^ 2)
知道我应该从哪里开始吗?