Удаление элемента из середины std :: heap

Я использую приоритетную очередь в качестве планировщика с одним дополнительным требованием. Мне нужно отменить запланированные элементы. Это равносильно удалению элемента из середины очереди приоритетов.

Я не могу использовать std :: priority_queue , поскольку доступ к любому элементу, кроме верхнего, защищен.

I ' m пытается использовать функции кучи алгоритма . Но мне все еще не хватает того, что мне нужно. Когда я удаляю элемент I из середины кучи, я хочу, чтобы он эффективно перестраивался. C ++ предоставляет следующие функции кучи:

  • std :: make_heap O (3n)
  • std :: push_heap O (lg (n))
  • std :: pop_heap O (2 lg (n))

Мне нужна новая функция вроде std :: repair_heap с большим O < 3n . Я бы указал ему местоположение дыры, где раньше находился отмененный элемент, и он правильно отрегулировал бы кучу.

Кажется, большой упущение - не предоставлять std :: repair_heap функция. Я упустил что-то очевидное?

Есть ли библиотека, которая предоставляет stl-совместимый std :: Я не использую std :: map по нескольким причинам.

  • Куча имеет постоянные накладные расходы на память.
  • Куча имеет отличную локальность кеша.
14
задан deft_code 19 January 2011 в 17:37
поделиться