Согласно этой странице, существует два определения heap
(используется std::make_heap
, std::is_heap
и т. д.):
До С++20:
Диапазон произвольного доступа [
first
,last
) представляет собой кучу относительно компараторcomp
, еслиbool(comp(first[(i - 1) / 2], first[i]))
естьfalse
для всех целых чиселi
в (0
,last - first
).
Начиная с С++20:
Диапазон произвольного доступа [
first
,last
) является кучей относительно компаратораcomp
, если диапазон является кучей относительноcomp
иstd::identity{}
(проекция личности).
У вас есть более простое определение? Например, когда comp
— это std::less
? Я не понимаю использования.
ОК, большое спасибо, я отредактирую вопрос, удалю примечание об ошибке и позволю запросить более четкое определение.
Наконец-то я нашел ответ в Википедии, heap
это:
tree
хранится в array
,i
находится по индексу (i-1)/2
max heap
(соответственно ниже для min heap
).
«в
(0, last - first)
» — это эксклюзивный диапазон: ни 0, ниlast - first
не являются его частями. Они заимствовали общепринятые математические обозначения — в одном предложении можно увидеть диапазон[first, last)
, в который входитfirst
, но нетlast
. Квадратные скобки означают «включая», скобки означают «исключая», и их можно сопоставлять в любой комбинации. Более подробное определение смотрите в Wiki.