我正在尝试使用可以容纳7位数电话号码和姓名的直接寻址来实现哈希表。当我将向量的大小设置为9999999时,没有错误,但是程序很慢并且几乎停止了。
std::vector <long long> myNumbers (9999999);
OR
std::vector <long long> myNumbers;
myNumbers.resize (9999999)
两者都失败了,有没有办法可以做到这一点?
答案 0 :(得分:4)
使用std::vector<long long>(9999999)
时,必须初始化~10M long long
s。假设每个long long
长度为8个字节,则程序必须在现场将80 MB内存清零。这不是即时的。
您确定要使用80 MB的矢量吗?听起来像std::unordered_map
或std::map
(取决于您是否需要按顺序键)是一种更好的数据结构。
答案 1 :(得分:2)
程序陷入困境是因为它试图为你分配大量数据,就像其他评论所说的那样。
但是,矢量可能不是数据的最佳数据结构。如果您正在存储电话号码,这意味着您的所有数据都将介于1000000和9999999之间,因此如果您使用数组或向量,则不会使用您分配的所有空间。使用地图。
- 编辑
那就是说,如果你希望你的数据真的密集,填写大部分的8,999,999种可能性,那么使用数组可能会更好。您可以通过创建大小为9,000,000的数组来利用所有空间,并通过从数字中减去1,000,000获得插入/查找索引,从而有效地将所有数字减少1,000,000。