优先级队列中用户对象的比较运算符

时间:2018-05-28 14:13:22

标签: c++ stl priority-queue

我有以下问题描述

您有一个并行化的程序并使用" n"处理给定列表的独立线程" m" 工作。线程按照输入中给出的顺序执行作业。如果有一个免费的线程,它立即 接受列表中的下一个工作。如果线程已开始处理作业,则不会中断或停止 直到它完成处理工作。如果多个线程试图同时从列表中取出作业,那么 具有较小索引的线程接受该作业。对于每个工作,您确切知道任何线程需要多长时间 处理这个工作,这个时间对于所有线程都是一样的。您需要确定每项工​​作 哪个线程将处理它以及何时开始处理。

输入格式。输入的第一行包含整数" n"和" m" 第二行包含整数 - 任何线程处理第一个作业所需的时间(以秒为单位)。 时间的顺序与线程从中获取作业的顺序相同。 线程从0开始编制索引。

如果我有以下输入

4 20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

对于上面的代码,我有以下代码

struct qThreadDetails {
        std::uint64_t m_uiThreadId;
        std::uint64_t m_availableTime;
        std::uint64_t m_counter;
};

struct qThreadCompare {
    bool operator()(const qThreadDetails & lhs, const qThreadDetails & rhs) const {
        if(lhs.m_availableTime < rhs.m_availableTime ) {
            if (lhs.m_uiThreadId < rhs.m_uiThreadId) {
                return false;
            }
        }
        if (lhs.m_availableTime < rhs.m_availableTime ) {
            return false;
        }
        return true;
    }
};

std::priority_queue<qThreadDetails, std::vector<qThreadDetails>, qThreadCompare > m_queThreads;

if (m_vecJobTimes.size() > 0) {
    m_vecAssignedWorkers.push_back(0);
    m_vecStartTimes.push_back(0);
    qThreadDetails jobDetails;
    // push job in queue.
    jobDetails.m_uiThreadId = 0;
    jobDetails.m_availableTime = m_vecJobTimes[0];
    jobDetails.m_counter = 0;
    m_queThreads.push(jobDetails);
}

unsigned int uiVecStartTimesIdx = 1;
for(unsigned int i = 1; i < m_uiNoOfThreads && uiVecStartTimesIdx < m_vecJobTimes.size(); 
                        ++i, uiVecStartTimesIdx++) {

    m_vecAssignedWorkers.push_back(i);
    m_vecStartTimes.push_back(0);
    // push jobs in queue.
    qThreadDetails jobDetails;
    jobDetails.m_uiThreadId = i;
    jobDetails.m_counter = 0;
    jobDetails.m_availableTime = m_vecJobTimes[i];

    m_queThreads.push(jobDetails); // ---------> problem here
}

崩溃无效的运营商&lt; 。不知道为什么。对于上面给出的输入。任何帮助

0 个答案:

没有答案