【发布时间】:2020-07-31 00:31:39
【问题描述】:
我需要维护一个大对象(T 类型)的优先级队列 @987654321@。由于这些对象的复制成本很高,我希望能够使用auto h = std::move(Q.top()) 检索可写对象。但我不能这样做,因为std::priority_queue<std::unique_ptr<T>>::top() 只返回一个常量引用。为什么? (有没有简单的解决方法?)
【问题讨论】:
-
修改优先队列中的元素会破坏其作为优先队列的属性。
-
@molbdnilo 也许有一个类似
pop()的方法可以将我的对象还给我? -
@molbdnilo 是的,我有。只是确保我有理由抛弃 const 或者我是否遗漏了什么。
-
您可以从priority_queue派生,然后您将获得底层容器
c成员(受保护)的访问权限。然后你可以随心所欲地使用c。但我不建议这样做。 -
写入这个对象会修改它在队列中的位置吗?
标签: c++ stl c++14 priority-queue