Минимальные кучи обычно (никогда?) Не реализуются с использованием явных узлов - поскольку куча всегда заполнена слева («завершена») и, таким образом, имеет четко определенную структуру, что было бы излишне неэффективным, поскольку обработка узлови ссылки на узлы вносят немало накладных расходов, не говоря уже о разрушении локальности ссылок, что приводит к пропаданию кэша и низкой производительности.
(То же самое относится и к максимальным кучам, конечно.)
Вместо этогоони реализованы с использованием массивов.На самом деле стандартная библиотека C ++ уже включает функции make_heap
, push_heap
и pop_heap
для работы с диапазонами итераторов.Используйте их вместе с vector
, и вы получите свою кучу.