【发布时间】:2009-11-02 23:29:10
【问题描述】:
我的目标是创建一个有效的结构来存储矩阵中最相关的条目(在没有内存限制的世界中)大约为 10^5 x 10^5 并填充双精度数。该矩阵是对称的,因此它实际上只包含 (10^10)/2 个值。
我需要在模拟中多次访问条目,因此快速检索至关重要。
为了保持结构易于管理,我将删除不太可能使用的成员。如果索引是 (int_x1, int_x2),我经常想删除所有包含例如 x1 的对。
什么是这个任务的最佳结构或结构集?两个整数的好散列是什么?
为了便携性,我想避免使用 Boost。我目前在程序的其他地方使用 TR1 的 unordered_map。我正在考虑再次将 unordered_map 与密钥对一起使用,但我不确定如何以这种方式有效地删除条目,而且我不知道一个好的哈希函数会是什么样子。
我是一个初级程序员,所以请说清楚。
【问题讨论】:
-
您是否还需要像删除所有 x1 成员一样频繁地删除所有 x2 成员?
-
您是否考虑过使用标准的稀疏矩阵存储方案,例如 CSR?根据您需要对矩阵执行的操作,它可能工作正常。
-
为了便携性,您想避免提升? Boost 非常便携,并且具有轻量级,可以满足您的要求。
-
@jmucchiello:我的表述可能不正确。我经常需要删除涉及某个元素 xi 的所有对(其中 i 来自 {1,2,...,n}。
-
@Patrick:公平......我是一名业余程序员,与许多其他业余程序员一起工作,也许我们都只需要采用 boost。 (这是为了科学研究,我们最终会分享代码。) boost 中是否有一个特殊的功能在这里会有所帮助?