存储和散列<int,int =“”> key(C ++)</int,>的最佳方法

时间:2009-11-02 23:29:11

标签: c++ hash tr1

我的目标是创建一个有效的结构来存储矩阵中最相关的条目(在没有内存限制的世界中)大约为10 ^ 5 x 10 ^ 5并且填充有双精度数。矩阵是对称的,因此它实际上只包含(10 ^ 10)/ 2个值。

我需要在模拟中多次访问条目,因此快速检索至关重要。

为了保持结构的可管理性,我将删除不太可能使用的成员。如果索引是(int_x1,int_x2),我通常会想要删除包含例如x1的所有对。

此任务的最佳结构或结构集是什么?两个整数的好哈希是什么?

为了便于携带,我想避免使用Boost。我目前正在程序的其他地方使用TR1的unordered_map。我想再次使用unordered_map和密钥对,但我不确定如何以这种方式有效地删除条目,我不知道什么是好的哈希函数。

我是一名初学者,所以请说清楚。

1 个答案:

答案 0 :(得分:1)

如果数据非常稀疏,您可以使用哈希表数组。

hash_map<int,double> matrix[] = new hash_map<int,double>[10000];
for (int i = 0; i < 10000; i++) matrix[i] = new hash_map<int,double>();

然后要查找值(x,y),使用x索引数组并在哈希表中查找y。

需要注意的一些事项:

  • 删除可能会非常昂贵,因为你必须遍历很多哈希表。
  • 当您删除/插入时,总存储空间会增加,您应该偶尔修剪()您的hash_maps。
  • 应该很容易利用对称性。