D: Как создать новую пустую двоичную кучу для хранения целых чисел?

Я немного запутался в том, как правильно использовать Binary Heap, представленный в std.container. В частности, я хотел создать максимальную кучу целых чисел, поэтому я попытался написать

auto maxHeap = BinaryHeap!int();

и получил жалобу компилятора на то, что int нельзя нарезать с помощью []. Я пытался прочитать документацию по нему на Фобосе, но не понимаю, как создать новую пустую бинарную кучу, предназначенную для хранения целых чисел.

Может ли кто-нибудь помочь мне?


person Koz Ross    schedule 10.02.2014    source источник


Ответы (2)


Существует интересная тема о BinaryHeaps.

Как это объясняется в потоке, вы можете попробовать использовать его следующим образом:

import std.container: Array, heapify;

void main()
{
    int[] arr = [1, 2, 3];
    auto wrapped = Array!int(arr);
    auto queue = heapify(wrapped);
}
person Cedric Morent    schedule 10.02.2014

Что ж, я скромно верю, что вы не запутаетесь, если прочитаете документацию о BinaryHeap.

Первое предложение ясно объясняет важную информацию:

Реализует двоичный контейнер кучи поверх заданного типа диапазона произвольного доступа (обычно T[]) или типа контейнера произвольного доступа (обычно Array!T).

Вот что вы должны сделать:

import std.stdio;
import std.container;

void main(string[] args) {
    int[] arr = [1, 4, 12, 19];
    auto bh = BinaryHeap!(int[])(arr);

    writeln(bh.length); // prints 4
}

Стоит напомнить людям, что массив D — это диапазон произвольного доступа.

person DejanLekic    schedule 10.02.2014