在多个容器中存储对象的最佳实践

Best practice for storing object in multiple containers

本文关键字:对象 最佳 存储      更新时间:2023-10-16

我想在priority_queueunordered_map中存储一个对象。做这样的事情有什么最佳实践吗?我考虑过将对象存储在单独的容器中(例如array),然后放弃指向其他两个容器的指针。

我很犹豫是否要这样做,因为这意味着我必须编写一些额外的比较器来处理容器将存储指针而不是实际对象的事实。此外,还有管理我不想处理的对象的所有权的额外工作。

所以,我想知道是否已经有一个建立的最好的方法来做到这一点?

您已经看到,如果您希望一个内容出现在两个位置,则必须存储对对象的引用(某种类型)。虽然你曾经会使用指针,但今天我们使用了shared_ptr。

这包装了指针,所以你不必管理生命周期所有权——指针只会在shared_ptr的引用计数下降到0时被删除,即当所有持有shared_ptr的人都放弃它时。你使用shared_ptr对象作为一个真正的对象,所以它很容易在你的容器中管理。

如果您没有c++ 11编译器,您可以使用boost版本(附带一个在vector和set中存储shared_ptr对象的示例)