我对如何正确使用Binary Heap
中提供的std.container
感到困惑。更具体地说,我想创建一个最大的整数堆,所以我尝试编写
auto maxHeap = BinaryHeap!int();
并得到了关于int
不能用[]切片的编译器投诉。我试图在Phobos上阅读它的文档,但我不明白如何创建一个新的空二进制堆来设计存储整数。
有人可以借给我一个手吗?
答案 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阵列是随机访问范围。