我想實現一個哈希表使用直接尋址,可以容納7位數的電話號碼和名稱。當我將矢量的大小設置爲9999999時,沒有錯誤,但程序非常慢,幾乎停止。最大的矢量大小分配C++
std::vector <long long> myNumbers (9999999);
OR
std::vector <long long> myNumbers;
myNumbers.resize (9999999)
兩者都失敗了,是有辦法,我能做到這一點?
我想實現一個哈希表使用直接尋址,可以容納7位數的電話號碼和名稱。當我將矢量的大小設置爲9999999時,沒有錯誤,但程序非常慢,幾乎停止。最大的矢量大小分配C++
std::vector <long long> myNumbers (9999999);
OR
std::vector <long long> myNumbers;
myNumbers.resize (9999999)
兩者都失敗了,是有辦法,我能做到這一點?
程序陷入困境是因爲它試圖爲您分配大量數據,就像其他評論所說的那樣。
但是,向量可能不是您的數據的最佳數據結構。如果您要存儲電話號碼,那意味着您的所有數據都在1000000和9999999之間,所以如果您使用數組或矢量,則不會利用您分配的所有空間。使用地圖。
- 編輯
也就是說,如果你希望你的數據是真的密集,填寫大多數8999999種可能性,使用數組可能會畢竟更好。您可以通過創建大小爲9,000,000的數組來利用所有空間,並通過從數字中減去1,000,000來獲取插入/查找索引,從而有效地將所有數字減少1,000,000。
當您使用std::vector<long long>(9999999)
時,它必須初始化〜10M long long
s。假設每個long long
的長度爲8個字節,則您的程序必須在現場清零80 MB的內存。這不是即時的。
您確定要使用80 MB矢量嗎?聽起來像是std::unordered_map
或std::map
(取決於您是否需要按順序鍵)是一個更好的數據結構使用。
嗯,我想你不明白矢量是如何工作的。矢量的大小是它可以包含多少個對象。你正試圖讓你的向量能夠包含'long long'類型的9'999'999個變量。如果您不知道要放入多少個電話號碼,只是不要在開始時調整它的大小。在將值放入其中後,它將自行調整大小。您可以將7位數電話號碼存儲在單個「long long」變量中。 – Jezor
定義「陷入困境」。雖然消隱數兆字節的內存並不是很快(本身),但它也不是很慢。當然不會「卡住」緩慢。 –