如何在大型双维数组中存储数据

时间:2012-05-08 00:33:01

标签: c++ arrays

我想在双维数组中分配10 ^ 9 * 10 ^ 9的内存,但这是不可能的。这是他们的出路吗?

我认为矢量可以解决这个问题,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:7)

今天你不能在任何计算机上分配10个 18 字节的内存(大约是百万兆字节)。但是,如果您的数据大多为零(即,是稀疏矩阵),那么您可以使用不同类型的数据结构来存储数据。这一切都取决于您存储的数据类型以及是否具有任何冗余特征。

答案 1 :(得分:3)

假设非零元素的数量远小于10 ^ 18,您需要阅读sparse arrays。实际上,甚至不要求稀疏数组中的大多数元素为零 - 它们只需要相同。基本思想是将非默认值保存在类似列表的结构中;列表中未找到的任何值都被假定为默认值。

答案 2 :(得分:0)

  

我想在双维数组中分配10 ^ 9 * 10 ^ 9的内存,但这是不可能的。这是他们的出路吗?

这超出了当前的硬件功能,而且这个大的数组不适用于任何实际目的(你可以自由计算走过每个元素需要几千年的时间)。

您需要创建“稀疏”数组。仅在内存中存储非零元素,提供类似数组的接口以访问它们,但在内部将它们存储在std::map<std::pair<xcoord, ycoord>, value>之类的内容中,对于不在map中的所有元素返回零。只要你不做任何鲁莽的事情,比如试图将每个元素设置为非零值,这应该是足够的数组替换。

左右....

你需要那么多记忆?