我在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%重複,接受的答案甚至與此處最高的答案相同。 –