2014-06-19 38 views
1

地圖我有箱的數組:的std ::使用大量的內存

vector<vector<int> > bins 

程序計算大量的類型Term和對應的整數的對象。每個bin都與一個對象Term相對應,並且ints需要以bin結尾。我目前做這個:

map<Term, int> helperMap; 
int binNumber=0; 
while(/*some condition*/) 
    { 
    Term temp; 
    int tempInt; 
    //Do some calculation to find temp & tempInt 

    if (helperMap.find(temp)==helperMap.end()) 
      { 
      vector<int> newBin; 
      newBin.push_back(tempInt); 
      bins.push_back(newBin); 
      helperMap[temp] = binNumber; 
      binNumber++; 
      } 

     else 
      { 
      bins[helperMap.find(temp)->second].push_back(tempInt); 
      } 
     } 

的問題是,在地圖(我不再需要進一步的)需要比箱式結構更多的內存,而這將嚴重製約上的程序。有沒有更有效的方法來做到這一點?

+1

這聽起來像是一個XY問題:http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – 101010

+0

以什麼方式?我確定'Term'對象的計算是必需的。 – RobVerheyen

+0

我們是否應該假設'Term'和'Object'在這段代碼中是同義的? – WhozCraig

回答

1

我會分兩步做。在你的循環中旋轉一次,計算你需要的容器數量,然後調用bins.resize(numberYouWillNeed) - 然後再次旋轉,所有你需要的是bins[x].push_back(tempInt); - 這會導致更少的內存分配,可能會使得速度更快。取決於你的計算是否昂貴以及你是否只能做一次。

但是,我看不到helperMapbins大得多 - 你確定這是問題嗎?

+0

'helperMap'比'bin'大很多的原因是'Term'對象存儲的數據遠不止一個int。 我會去嘗試這個,但是不要以相同大小的地圖結束?它仍然需要在地圖上存儲每個不同的「術語」? – RobVerheyen

+0

我試過了,但不幸的是該程序仍在吃掉我所有的記憶。我知道一個事實,那就是地圖吃東西,因爲我可以在不填滿垃圾箱的情況下運行循環,只是爲了查看地圖使用的內存。 – RobVerheyen