这段代码是如何工作的?具体来说, WorkerCompare 结构
How does this code work? Specifically, the WorkerCompare struct
(抱歉,如果这个问题听起来含糊不清。如果需要,我会添加更多信息。)
程序的任务是模拟并行处理。我在 Internet 上找到的一种解决方案包含这段有效的代码,但我不知道如何使用。具体来说,为什么以及如何使用 WorkerCompare
:
class Worker {
public:
int id;
long long nextFreeTime;
Worker (int id) {
this->id = id;
nextFreeTime = 0;
}
};
struct WorkerCompare {
bool operator()(const Worker &w1, const Worker &w2) const {
if(w1.nextFreeTime == w2.nextFreeTime)
return w1.id > w2.id;
else
return w1.nextFreeTime > w2.nextFreeTime;
}
};
这段代码主要用在这个函数中:
void AssignJobs() {
assigned_workers_.resize(jobs_.size());
start_times_.resize(jobs_.size());
priority_queue<Worker, vector<Worker>, WorkerCompare> pq;
for(int i = 0; i < num_workers_; i++) {
pq.push(Worker(i));
}
for (int i = 0; i < jobs_.size(); i++) {
Worker freeThread = pq.top();
pq.pop();
assigned_workers_[i] = freeThread.id;
start_times_[i] = freeThread.nextFreeTime;
freeThread.nextFreeTime += jobs_[i];
pq.push(freeThread);
}
}
它将元素添加到向量 assigned_workers_
和 start_times_
中,其中列出了用于执行进程的线程以及进程开始的时间。
完整源码可见here.
priority_queue<Worker, vector<Worker>, WorkerCompare> pq;
我假设这是标准库中的 std::priority_queue
。
优先队列通过比较个元素来工作。这就是 WorkerCompare
的用途。它比较 Worker
.
类型的对象
(抱歉,如果这个问题听起来含糊不清。如果需要,我会添加更多信息。)
程序的任务是模拟并行处理。我在 Internet 上找到的一种解决方案包含这段有效的代码,但我不知道如何使用。具体来说,为什么以及如何使用 WorkerCompare
:
class Worker {
public:
int id;
long long nextFreeTime;
Worker (int id) {
this->id = id;
nextFreeTime = 0;
}
};
struct WorkerCompare {
bool operator()(const Worker &w1, const Worker &w2) const {
if(w1.nextFreeTime == w2.nextFreeTime)
return w1.id > w2.id;
else
return w1.nextFreeTime > w2.nextFreeTime;
}
};
这段代码主要用在这个函数中:
void AssignJobs() {
assigned_workers_.resize(jobs_.size());
start_times_.resize(jobs_.size());
priority_queue<Worker, vector<Worker>, WorkerCompare> pq;
for(int i = 0; i < num_workers_; i++) {
pq.push(Worker(i));
}
for (int i = 0; i < jobs_.size(); i++) {
Worker freeThread = pq.top();
pq.pop();
assigned_workers_[i] = freeThread.id;
start_times_[i] = freeThread.nextFreeTime;
freeThread.nextFreeTime += jobs_[i];
pq.push(freeThread);
}
}
它将元素添加到向量 assigned_workers_
和 start_times_
中,其中列出了用于执行进程的线程以及进程开始的时间。
完整源码可见here.
priority_queue<Worker, vector<Worker>, WorkerCompare> pq;
我假设这是标准库中的 std::priority_queue
。
优先队列通过比较个元素来工作。这就是 WorkerCompare
的用途。它比较 Worker
.