std :: map使用大量内存

时间:2014-06-19 17:05:53

标签: c++ std

我有一系列垃圾箱:

vector<vector<int> > bins

程序计算大量Term类型的对象和相应的整数。每个bin对应一个Term对象,并且int需要最终在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);
          }
      }

问题是地图(我不再需要它)需要比bin结构更多的内存,这对程序造成了严重的限制。有没有更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

我会分两步完成。旋转你的循环一次,计算你需要多少个垃圾箱,并调用bins.resize(numberYouWillNeed) - 然后再次旋转,你所需要的只是bins[x].push_back(tempInt); - 这将导致更少的内存分配也可能使这更快。取决于您的计算是否昂贵以及您是否只能进行一次。

但是,我看不到helperMapbins大得多 - 你确定这是问题吗?