оператор сравнения для объекта пользователя в очереди приоритетов - PullRequest
0 голосов
/ 28 мая 2018

У меня следующее описание проблемы

У вас есть программа, которая распараллелена и использует «n» независимых потоков для обработки заданного списка «m» заданий.Потоки принимают задания в том порядке, в котором они указаны во входных данных.Если есть свободная тема, она немедленно берет следующую работу из списка.Если поток начал обработку задания, он не прерывается и не останавливается, пока не завершит обработку задания.Если несколько потоков пытаются получить задания из списка одновременно, то поток с меньшим индексом принимает работу.Для каждого задания вы точно знаете, сколько времени потребуется любому потоку для его обработки, и это время одинаково для всех потоков.Вам необходимо определить для каждого задания, какой поток его обработает, и когда он начнет обработку.

Формат ввода.Первая строка содержит целые числа «n» и «m». Вторая строка содержит «целые числа» - время в секундах, которое требуется любому потоку для обработки to-го задания.Время указывается в том же порядке, что и в списке, из которого потоки выполняют задания.Потоки индексируются, начиная с 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
}

Это сбой недопустимого оператора <.не уверен почему.Для ввода приведенного выше.Любая помощь </p>

...