У меня есть 100 наборов объектов A, каждый набор соответствует точке запроса Qi, 1 <= i <= 100
.
class A {
int id;
int distance;
float x;
float y;
}
В каждой итерации моего алгоритма я выбираю одну точку запроса Qi и извлекаю из соответствующего набора объект, имеющий минимальное значение расстояния. Затем мне нужно найти этот конкретный объект во всех 100 наборах, выполнить поиск по его идентификатору и удалить все эти объекты.
Если я использую кучу для каждого набора объектов, дешево извлечь объект с помощью MIN(distance)
. Однако я не смогу найти тот же объект в других кучах, которые ищут по id, потому что куча организована по значению расстояния. Кроме того, обновление кучи стоит дорого.
Другой вариант, который я рассмотрел, - это использование map<id, (distance, x, y)>
для каждого набора. Этот способ поиска (операция поиска) по идентификатору дешев. Однако для извлечения элемента с минимальным значением требуется линейное время (оно должно проверять каждый элемент на карте).
Есть ли какая-либо структура данных, которую я мог бы использовать, которая эффективна для обеих необходимых мне операций?
- extract_min (расстояние)
- находка (ID)
Заранее спасибо!