我的目标是创建一个有效的结构来存储矩阵中最相关的条目(在没有内存限制的世界中)大约为10 ^ 5 x 10 ^ 5并且填充有双精度数。矩阵是对称的,因此它实际上只包含(10 ^ 10)/ 2个值。
我需要在模拟中多次访问条目,因此快速检索至关重要。
为了保持结构的可管理性,我将删除不太可能使用的成员。如果索引是(int_x1,int_x2),我通常会想要删除包含例如x1的所有对。
此任务的最佳结构或结构集是什么?两个整数的好哈希是什么?
为了便于携带,我想避免使用Boost。我目前正在程序的其他地方使用TR1的unordered_map。我想再次使用unordered_map和密钥对,但我不确定如何以这种方式有效地删除条目,我不知道什么是好的哈希函数。
我是一名初学者,所以请说清楚。
答案 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。
需要注意的一些事项: