2016-06-26 167 views
-1

我想实现一个哈希表使用直接寻址,可以容纳7位数的电话号码和名称。当我将矢量的大小设置为9999999时,没有错误,但程序非常慢,几乎停止。最大的矢量大小分配C++

std::vector <long long> myNumbers (9999999); 

OR

std::vector <long long> myNumbers; 
myNumbers.resize (9999999) 

两者都失败了,是有办法,我能做到这一点?

+4

嗯,我想你不明白矢量是如何工作的。矢量的大小是它可以包含多少个对象。你正试图让你的向量能够包含'long long'类型的9'999'999个变量。如果您不知道要放入多少个电话号码,只是不要在开始时调整它的大小。在将值放入其中后,它将自行调整大小。您可以将7位数电话号码存储在单个“long long”变量中。 – Jezor

+1

定义“陷入困境”。虽然消隐数兆字节的内存并不是很快(本身),但它也不是很慢。当然不会“卡住”缓慢。 –

回答

2

程序陷入困境是因为它试图为您分配大量数据,就像其他评论所说的那样。

但是,向量可能不是您的数据的最佳数据结构。如果您要存储电话号码,那意味着您的所有数据都在1000000和9999999之间,所以如果您使用数组或矢量,则不会利用您分配的所有空间。使用地图。

- 编辑

也就是说,如果你希望你的数据是真的密集,填写大多数8999999种可能性,使用数组可能会毕竟更好。您可以通过创建大小为9,000,000的数组来利用所有空间,并通过从数字中减去1,000,000来获取插入/查找索引,从而有效地将所有数字减少1,000,000。

4

当您使用std::vector<long long>(9999999)时,它必须初始化〜10M long long s。假设每个long long的长度为8个字节,则您的程序必须在现场清零80 MB的内存。这不是即时的。

您确定要使用80 MB矢量吗?听起来像是std::unordered_mapstd::map(取决于您是否需要按顺序键)是一个更好的数据结构使用。