2016-06-26 166 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(取決於您是否需要按順序鍵)是一個更好的數據結構使用。