Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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+的哈希函数+;_C++_Data Structures_Hash_Hashmap_Hashtable - Fatal编程技术网

C++ 映射C+的哈希函数+;

C++ 映射C+的哈希函数+;,c++,data-structures,hash,hashmap,hashtable,C++,Data Structures,Hash,Hashmap,Hashtable,我试图确定一个接受输入(I,k)并确定唯一解决方案的哈希函数 (i,k)的可能输入范围为0到100。将每个(i,k)作为三叉树中一个节点的位置。 Ex: (0, 0) can diverge to (1, 1) (1, 0) (1, -1). (1, 1) can diverge to (2, 2) (2, 1) (2, 0). 此处给出的示例: http://www.google.com/imgres?imgurl=http://sfb649.wiwi.hu-berlin.de/f

我试图确定一个接受输入(I,k)并确定唯一解决方案的哈希函数

(i,k)的可能输入范围为0到100。将每个(i,k)作为三叉树中一个节点的位置。
Ex: (0, 0) can diverge to (1, 1) (1, 0) (1, -1). 
    (1, 1) can diverge to (2, 2) (2, 1) (2, 0).
此处给出的示例:

http://www.google.com/imgres?imgurl=http://sfb649.wiwi.hu-berlin.de/fedc_homepage/xplore/tutorials/stfhtmlimg1156.gif&imgrefurl=http://sfb649.wiwi.hu-berlin.de/fedc_homepage/xplore/tutorials/stfhtmlnode41.html&h=413&w=416&sz=4&tbnid=OegDZu-yeVitZM:&tbnh=90&tbnw=91&zoom=1&usg=__9uQWDNYNLV14YioWWbrqPgfa3DQ=&docid=2hhitNyRWjI_DM&hl=en&sa=X&ei=xAfFUIbyG8nzyAHv2YDICg&ved=0CDsQ9QEwAQ
我在用地图

map <double, double> hash_table

但是,我无法确定具有特定(I,k)的唯一密钥。我可以使用什么样的函数来帮助我这样做?

@Grizzly认为使用double作为键是有问题的,这是正确的。也许使用基于字符串的哈希技术会更好

@Grizzly认为使用double作为键有问题是正确的。也许使用基于字符串的哈希技术会更好

从数学上讲,你正在寻找一个新的答案。这不是计算机科学意义上的散列函数,因为散列函数有时会产生冲突(除非是冲突)


您标记的
hash_table
不是哈希表
std::map
是一种称为有序映射的不同数据结构,它能够使用任何键类型,从数学上讲,小于运算符
可以为其寻找一个。这不是计算机科学意义上的散列函数,因为散列函数有时会产生冲突(除非是冲突)


您标记的
hash_table
不是哈希表
std::map
是一种称为有序映射的不同数据结构,它可以使用任何键类型,如果i&k为0-100,则小于运算符
,而您的键可以是一个简单的短键(甚至是有符号的),并且如果i&k为0-100,它可以使用类似
short key=i | k的内容唯一生成,您的密钥可以是一个简单的短密钥(甚至是有符号的),并且是通过类似
short key=i | k的内容唯一生成的。您绝对确定要使用
double
作为
映射的密钥吗?Floatingpoint计算的精度不得而知,因此获取一个值可能很棘手。但是如果我使用“int”作为贴图的键,那么我将有机会在两个不同的(I,k)点之间重叠。您绝对确定要使用
double
作为
贴图的键吗?Floatingpoint计算的精度不得而知,因此获取一个值可能很棘手。但是如果我使用“int”作为映射的键,那么我将有机会在两个不同的(I,k)点之间重叠。我可以将(I,k)转换为字符串吗?你说的是0table[std::make_pair(i,j)]
。我如何访问像table[i,j]这样的值?@Josh:Close。要获取值,它是
table[std::make_pair(i,j)]
。它可以是“int key=i | k吗?每个值需要7位(0-100),所以任何16位或更高的整数类型都可以(实际上,
k可以是吗?”int key=i | k每个值(0-100)需要7位,因此任何16位或更高的整数类型都可以(实际上,
k)
{
    //double val = pow(i, k) + i;
    //return (val % 4294967296);
    return (i*3.1415 + k*i*9.12341); 
}
std::map<std::pair<int, int>, double> table;
table[std::make_pair(i, j)] = value;