我正在尝试决定用于事件调度程序的容器。我想要满足的要求是:
哪些容器可能?
还有其他选择吗?我已经读过,通常不建议您创建自己的容器(例如链接列表)以提高效率。
感谢您的建议!
修改
从评论中,还有两点建议:
答案 0 :(得分:1)
- 事件应按时间排序,并通过获取进行评估 调度程序的前端,评估事件,然后删除 前面。
醇>
使用std::priority_queue
或std::set
。
- 可以随时插入事件(计划在将来的任何时间进行评估)。
醇>
使用std::priority_queue
或std::set
。
- 应该可以指向一个不是的事件 如果将其他元素添加到调度程序,则会更改。例如, 在评估当前事件时,可能还需要 删除未来的事件。关于这个未来事件的知识应该是 实现为指针。
醇>
使用std::set
而不是指向存储元素的指针,使用迭代器。 They are not invalidated从集合中删除元素时(迭代器除了已删除的元素除外)。
- 应该可以重新安排事件,例如把时间改成未来的时间。
醇>
使用std::set
;使用C ++ 17,您可以拼接(std::list::extract
)您想要的元素,修改它的优先级,然后将其粘贴回(std::list::merge
)。