最大向量大小赋值C ++

时间:2016-06-26 00:13:36

标签: c++

我正在尝试使用可以容纳7位数电话号码和姓名的直接寻址来实现哈希表。当我将向量的大小设置为9999999时,没有错误,但是程序很慢并且几乎停止了。

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

OR

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

两者都失败了,有没有办法可以做到这一点?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

- 编辑

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