Определите, существует ли узел в Boost binomial_heap

Я пытаюсь определить, существует ли элемент в boost :: heap :: binomial_heap, потому что мне нужно знать, должен ли я вызывать update () (если узел уже существует) или push () (если узел не существует). Некоторые очереди предоставляют функцию push_or_update () именно для этой цели. Единственное, что я мог выяснить, это сохранить карту свойств с тем же типом индекса, что и узлы в очереди, и значением_тендлера ‘handle_t’. Затем я могу посмотреть на карте, есть ли у элемента действительный дескриптор, чтобы я мог нажать, если это не так, или обновить, если это так.

Есть лучший способ сделать это?

Вот документ для справки.

0

Решение

Это не то, что биноминальная куча должна делать.

Обычный способ решения вашей проблемы: использовать хеш-карту (или другую структуру данных, которая вам нравится) для сохранения соответствия между значениями и handles. Затем вы можете запросить хеш-карту для дескриптора. Если он существует, этот дескриптор позволит вам изменить значение в куче. Если он не существует, вы можете просто добавить новое значение в кучу (конечно, и новое отображение в хэш-карте)

Другой способ решения проблемы — использовать древовидный набор / карту, что проще и может быть более эффективным, чем решение, которое я описал выше, в зависимости от фактического варианта использования.

0

Другие решения

Других решений пока нет …