我有2個對象:映射比稀疏向量更好嗎?
vector<string> v(999999);
map<int, string> m;
我需要存儲一些指數串對,雖然它是非常稀疏(說只有20對)。我想知道是否載體需要更多的內存比地圖?如果是這樣,矢量佔用多少內存?爲什麼在這種情況下使用矢量不好?
我有2個對象:映射比稀疏向量更好嗎?
vector<string> v(999999);
map<int, string> m;
我需要存儲一些指數串對,雖然它是非常稀疏(說只有20對)。我想知道是否載體需要更多的內存比地圖?如果是這樣,矢量佔用多少內存?爲什麼在這種情況下使用矢量不好?
我想你可以使用矢量如果查找時間絕對關鍵,訂單的任何地方,因爲它是在不斷載體,有效指針算術因爲你已經知道了索引,但是隨着地圖上的大小(O(log n))增長。儘管這種折衷的情況確實存在,但情況確實很糟糕。
對於大約20個元素,創建具有10^6個元素的矢量沒有意義。地圖的使用將具有更好的內存佔用,甚至可能比矢量更快。你也可以考慮一個混合方法,使用std::pair<int,std::string>
的矢量來保存鍵/值對,並對矢量進行線性搜索(20個元素是,很少有,可以將成本視爲常數,而且可能更簡單的算法補償額外的操作次數)。
這不是一個稀疏矢量 –