选择哪个容器?

时间:2014-10-15 09:14:14

标签: c++ containers game-loop

我不确定这个问题是关于容器的,请耐心等待。

游戏已经转变为'如果递增,则不会在特定时间触发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转......

1 个答案:

答案 0 :(得分:1)

如果这确实是个问题,您可以按object::ctr值对其进行分组。例如,在这样的容器中(假设object::ctr具有类型size_t

::Std::unordered_map<size_t, ::std::vector<object*>>

这需要一些维护,因为一旦某个特定的存储桶空了,你必须确保摆脱空向量。但是如果你不需要ctr成员在其他地方,你可以完全删除它并在整个集合中保存迭代(你只需将向量从一个存储桶移动到下一个存储桶)。