我在priority_queue中有一个unique_ptr,我想从该集合中移除它并将其放在deque上,同时保持unique_ptr的所有权语义。但我找不到一种方法将其从priority_queue中解脱出来,而不会出现编译错误:“尝试引用已删除的函数”。什么是正确的方式来实现这一目标?如何从priority_queue中提取unique_ptr并维护所有权语义
struct MyStruct {
int val = 2;
MyStruct(const int val) : val(val) {}
};
void testDeque() {
std::priority_queue<std::unique_ptr<MyStruct>> q1;
q1.emplace(std::make_unique<MyStruct>(10));
std::deque<std::unique_ptr<MyStruct>> q2;
q2.push_back(q1.top()); // <- compiler error "attempting to reference a deleted function"
q2.push_back(std::move(q1.top())); // <- compiler error "attempting to reference a deleted function"
q1.pop();
}
看起来你不应该这样做,为[顶()返回一个为const_reference(http://en.cppreference.com/w/cpp/container/priority_queue/top)。 –
这是@MateuszDrost建议的100%重复,接受的答案甚至与此处最高的答案相同。 –