【发布时间】:2023-03-03 22:19:02
【问题描述】:
我正在尝试决定将哪个容器用于事件调度程序。我试图满足的要求是:
- 事件应按时间排序,并通过获取 调度器的前面,评估事件,然后删除 前面。
- 可以随时插入事件(计划在将来的任何时间进行评估)。
- 应该可以有一个指向不属于 如果将其他元素添加到调度程序,则更改。例如, 在评估当前事件时,可能还需要 删除未来的事件。关于这个未来事件的知识应该是 实现为指针。
- 应该可以重新安排事件,例如将时间更改为未来时间。
哪些容器是可能的?
- STL 队列 - 不允许在任何地方插入事件(例如按时间)。
- STL 向量 - 将新事件插入向量中会破坏指向现有事件的指针。
-
STL 列表 -
事件在构建后是恒定的,因此除了删除现有事件然后稍后创建新事件之外,无法重新安排。编辑:将此与STL集混淆。
还有其他选择吗?我读过一般不建议为了提高效率而创建自己的容器(例如链表)。
感谢您的建议!
编辑
来自 cmets,还有两个建议:
- STL 集 - 插入后元素保持不变。
- STL priority_queue - 根据选择的 STL 容器(vector 或 deque),这可以在插入后保留指针(deque 确实如此),但只有在任一端插入。但是,插入后元素是不变的。
【问题讨论】:
-
对于要求 1 和 2,有趣的是您没有探索
std::set和std::priority_queue -
啊,谢谢!没有付出足够的努力。这些容器在插入后是否保留指向现有元素的指针?
-
编辑:因为
std::priority_queue允许你指定一个容器,它可以是来自STL的std::vector或std::deque,那么使用std::deque会保留指针 -
我没有真正看到
std::list的问题。创建事件后如何常量? -
@Kurt
std::deque仅在向前面或后面添加/删除指针时保留指针,而不是在中间。