这段代码是如何工作的?具体来说, 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.

类型的对象