1

我对如何正确使用Binary Heap. std.container更具体地说,我想创建一个最大的整数堆,所以我试着写

auto maxHeap = BinaryHeap!int();

并收到编译器抱怨int不能用 [] 切片。我试图在 Phobos 上阅读它的文档,但我不明白如何创建一个新的、空的二进制堆,用于存储整数。

有人可以帮帮我吗?

4

2 回答 2

5

有一个关于 BinaryHeaps 的有趣线程

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

import std.container: Array, heapify;

void main()
{
    int[] arr = [1, 2, 3];
    auto wrapped = Array!int(arr);
    auto queue = heapify(wrapped);
}
于 2014-02-10T10:59:21.363 回答
1

好吧,如果您阅读有关 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 数组是一个随机存取范围。

于 2014-02-10T14:19:48.710 回答