D:如何创建一个新的空二进制堆来存储整数?

时间:2014-02-10 10:18:31

标签: containers d binary-heap

我对如何正确使用Binary Heap中提供的std.container感到困惑。更具体地说,我想创建一个最大的整数堆,所以我尝试编写

auto maxHeap = BinaryHeap!int();

并得到了关于int不能用[]切片的编译器投诉。我试图在Phobos上阅读它的文档,但我不明白如何创建一个新的空二进制堆来设计存储整数。

有人可以借给我一个手吗?

2 个答案:

答案 0 :(得分:5)

有一个有趣的thread about BinaryHeaps

正如线程中所解释的那样,您可以尝试以这种方式使用它:

import std.container: Array, heapify;

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

答案 1 :(得分:1)

好吧,我谦卑地相信,如果你阅读documentation about 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阵列是随机访问范围。