C++ 如何在大型二维数组中存储数据

C++ 如何在大型二维数组中存储数据,c++,arrays,C++,Arrays,我想在一个双维数组中分配10^9*10^9的内存,但这是不可能的。他们有办法吗 我认为vector可以解决这个问题,但我不知道怎么做。今天,在任何一台计算机上,都无法分配1018字节的内存,即大约一百万TB的内存。但是,如果您的数据大部分是零(即稀疏矩阵),则可以使用不同类型的数据结构来存储数据。这完全取决于您存储的数据类型以及数据是否具有任何冗余特征。假设非零元素的数量远小于10^18,您将需要读取数据。事实上,稀疏数组中的大多数元素都是零甚至不是必需的——它们只需要是相同的。其基本思想是将非

我想在一个双维数组中分配10^9*10^9的内存,但这是不可能的。他们有办法吗


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

今天,在任何一台计算机上,都无法分配1018字节的内存,即大约一百万TB的内存。但是,如果您的数据大部分是零(即稀疏矩阵),则可以使用不同类型的数据结构来存储数据。这完全取决于您存储的数据类型以及数据是否具有任何冗余特征。

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

我想在一个双维数组中分配10^9*10^9的内存,但这是不可能的。他们有办法吗

这远远超出了当前的硬件能力,而且这么大的阵列不适合任何实际用途,您可以自由计算穿过每个元素需要多少数千年的时间

您需要创建稀疏数组。只在内存中存储非零元素,提供类似数组的接口来访问它们,但在内部将它们存储在类似std::map的东西中,对于map中没有的所有元素都返回零。只要您不做一些鲁莽的事情,比如尝试将每个元素都设置为非零值,这就足够替换数组了

所以


你需要这么多内存干什么?

你有10^18字节的内存吗?顺便说一句,如果你真的需要一次分配这么多内存,你很可能做错了什么:Chuck Norris可以分配它:[无需引用]@NiklasB://根据谷歌搜索,他们总共只有4 PB的内存。这大约是一百万TB的1000倍。即使你一次抓住它,它也不会是一个连续的街区。@SigTerm:当然,他们试图对公众隐瞒这一点。不要用谷歌来研究他们;无论如何,我想我已经当过律师了。@NiklasB.:Wolframalpha说,人类所有知识的总规模估计为10^19。这只比OP想要分配的金额大10倍。对我来说,人类所有的知识听起来都很像谷歌;顺便说一句,我不是认真的。