C ++在处理MIA的许多元素时迭代一个巨大的std :: multimap

时间:2013-12-15 08:21:02

标签: c++ exception c++11 iterator multimap

我的情况是object s会将事件(包含函数指针的结构,如object::do_something)添加到其中的“事件链”(std::multimap)中构造函数。每次游戏更新并按顺序执行每个事件时,我的解释器会读取事件链(按深度排序)。当object被销毁时,它将自动从析构函数中删除链中的所有事件(以防止可能的事件泄漏)。

因为事件按深度排序,所以对象可能会注册链中“彼此”“下一个”的多个事件。当一个对象自行销毁时,它会取消所有事件的链接并立即停止运行它的代码共享(当某些东西被销毁时,它就无法做任何事情)。我狡猾地提出了这样做的方法;删除对象的特定函数,instance_destroy()将抛出一个异常,我的事件解释器可以捕获并继续链中的下一个事件。

我已经意识到了;

  • 可以从链中取消链接不可预测的事件数量,当对象自行销毁时,当前迭代器(可能)无效。
  • 对象可以在其生命周期内以及自身中摧毁其他对象。在破坏的情况下,我不能简单地保留下一个不属于当前对象的迭代器的副本,因为它也可以被删除!

当控制权传递回解释器(例如,通过异常)并且的事件已被删除,包括可能的当前迭代器时,我无法知道接下来要执行什么。我无法从一开始就启动地图 - 这会导致游戏中出现未定义的行为;事情会被执行两次。我也无法复制地图 - 它绝对是巨大的 - 它会带来巨大的性能损失。我无法重新设计系统的工作方式,因为它不是我的协议。

考虑以下数据结构;

typedef std::multimap<real_t, event> events_by_depth_t;

如果满足上述要求,我如何迭代它?

我正在使用C ++ 11。

0 个答案:

没有答案