Чем можно заменить priority_queue из С++ в Python?
Есть задача - переписать код из С++ на Python. В процессе выполнения этой задачи столкнулся с тем, что в Python в принципе нет аналога для priority_queue. Вот код на С++:
#include <iostream>
#include <queue>
int duration[1000]; // Продолжительности обработки для каждого робота
// Очередь деталей на обработку для каждого этапа (сначала те, что готовы раньше)
std::priority_queue <std::pair <int, int>> q; // pair <время готовности детали, номер робота>
void fill_q() { // Читаем время работы роботов и заполняем очередь готовности первой детали на каждом
int n; std::cin >> n;
for (int i = 0; i < n; i++) {
std::cin >> duration[i];
q.emplace(-duration[i], i); // минус, чтобы не возиться с компаратором возрастания
}
}
int next() { // Достаем очередную готовую деталь и "закладываем" следующую для этого робота
int time = -q.top().first, index = q.top().second;
q.pop(); // изымаем деталь
q.emplace(-time - duration[index], index); // добавляем следующую деталь, обработанную этим роботом
return time;
}
int main() {
int N; std::cin >> N;
fill_q(); // <---- первый этап обработки
int times[N]; // время готовности деталей после первого этапа (от поздних к ранним)
for (int i = N - 1; i >= 0; i--) times[i] = next();
while (!q.empty()) q.pop(); // очищаем очередь обработки
fill_q(); // <---- второй этап обработки
int max_time = 0;
for (int i = 0; i < N; i++) {
int t = times[i] + next();
if (t > max_time) max_time = t;
}
std::cout << max_time;
}
А это мой код, написанный на Python. Обычный словарь в данном случае не подойдет.
duration = [1 for i in range (1000)]
q = {} #heapq - не совсем то, что нужно. Нужно что-то вроде TreeMap в Java
def fill_q():
print("n ")
n = int(input())
print("duration[i]")
for i in range(n):
duration[i] = int(input())
#q[i] = i
def next():
time = 1 # - q.top().first ?
index = 1 # q.top().second ?
# q.pop()
# q.emplace(-time - duration[index], index) снова-таки не понятно насчет структуры данных, которой можно заменить prority queue
return time
def proccess():
print("N ")
N = int(input())
fill_q()
times = [1 for i in range(N)]
for i in range (N - 1, 0, -1):
times[i] = next()
while bool(q):
q.pop()
fill_q()
max_time = 0
for i in range(N):
t = times[i] + next()
if t > max_time:
max_time = t
return max_time
print(proccess())
Возможно, кто-то знает аналог этой структуре данных в Python или как решить задачу иным способом?