我有一系列垃圾箱:
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结构更多的内存,这对程序造成了严重的限制。有没有更有效的方法来做到这一点?
答案 0 :(得分:1)
我会分两步完成。旋转你的循环一次,计算你需要多少个垃圾箱,并调用bins.resize(numberYouWillNeed)
- 然后再次旋转,你所需要的只是bins[x].push_back(tempInt);
- 这将导致更少的内存分配也可能使这更快。取决于您的计算是否昂贵以及您是否只能进行一次。
但是,我看不到helperMap
比bins
大得多 - 你确定这是问题吗?