gpt4 book ai didi

c++ - 如何在两个 STL 容器之间移动 unique_ptr 对象

转载 作者:行者123 更新时间:2023-12-05 06:55:49 25 4
gpt4 key购买 nike

<分区>

#include <utility>
#include<unordered_map>
#include<queue>
using namespace std;


struct Task {
char t;
int cnt;
Task(char ch, int cnt):t(ch), cnt(cnt){};
};
struct CompTask {
bool operator() (const unique_ptr<Task>& a, const unique_ptr<Task>& b) {
return a->cnt < b->cnt;
}
};
class Schedule {
public:
int schedule() {
unordered_map<unique_ptr<Task>, int> sleep_q;
priority_queue<unique_ptr<Task>, vector<unique_ptr<Task>>, CompTask> ready_q; // max heap
ready_q.push(std::make_unique<Task>('A', 1));

auto& ptr = ready_q.top();
//sleep_q.insert({ptr, 1}); // compile error
sleep_q.insert({std::move(ptr), 1}); // compile error
// some other code...

return 1;
}
};
int main() {
return 0;

}
// error:
cpp:38:17: error: no matching member function for call to 'insert'
sleep_q.insert({std::move(ptr), 1}); // compile error
~~~~~~~~^~~~~~

编程上下文:我有一个任务类,程序试图模拟任务调度(涉及在就绪队列和 sleep 队列之间来回移动任务)。我有两个标准容器分别用于就绪队列和 sleep 队列,priority_queue 的值类型为 unique_ptr<Task> , 另一个是unorder_map( sleep 队列),其键也是 unique_ptr<Task> .我无法将 unique_ptr 对象从 priorty_queue 移动到 unordered_map(如代码所示)。

我的问题是:(1) 如何将一个项目插入到 unordered_map 中,我在这样做时遇到了编译错误。(2) 在问题上下文中,首选哪种类型的“指针”? unique_ptr<Task>, shared_ptr<Task>, or just Task*

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com