我不确定这个问题是关于容器的,请耐心等待。
游戏已经转变为'如果递增,则不会在特定时间触发Timer。
现在还有一大堆对象,其中一些需要更新somtimes。会发生什么是对象o1需要在n1转中更新,对象o2在n2等中更新。
简单的解决方案是:
for (object* o : objectVector) {
o->ctr--;
if (o->ctr == 0) { o->update(); };
}
现在我觉得这非常低效,如果我每回合爬过1000个物体计数器,只是为了更新它们中的10个。 我确定在某个地方出现了这个问题!
此外,我可能允许对象有时会在+/-几圈左右更新预期的更新。
我以为我可以有很多向量,一个用于接下来的5个,一个用于5-10个,一个用于10-15个转向,等等。但是后来我有太多的向量,如果有些对象只需要更新,比如100转......
答案 0 :(得分:1)
如果这确实是个问题,您可以按object::ctr
值对其进行分组。例如,在这样的容器中(假设object::ctr
具有类型size_t
)
::Std::unordered_map<size_t, ::std::vector<object*>>
这需要一些维护,因为一旦某个特定的存储桶空了,你必须确保摆脱空向量。但是如果你不需要ctr
成员在其他地方,你可以完全删除它并在整个集合中保存迭代(你只需将向量从一个存储桶移动到下一个存储桶)。