如何声明一个红黑树数组?

How do I declare an array of red black trees?

当我想初始化红黑树时,我按照文档中的说明进行操作。

auto rbt = redBlackTree(1,2,3,4)

但是如果我想全局声明它或制作一个红黑树数组,我不知道该怎么做,文档也没有帮助。我尝试了各种方法,但经常遇到类似以下的错误:redBlackTree!int is used as a type 你能帮帮我吗?如果我知道要放什么而不是 auto,我就能做到,也就是说,如果我知道 redBlackTree.

的类型

我想在全局范围内声明一个红黑树或者声明一个需要声明类型的数组,我想做这样的事情:

type rbt;
void main() {
    rbt.insert(3);
}

或者这个:

void main{
    type[2] rbt;
    rbt[0].insert(1);
}

您不需要知道 redBlackTree 的类型。您可以在 compile-time 使用 typeof:

查询
alias RBTree = typeof(redBlackTree(1));
RBTree rbt = redBlackTree(1, 2, 3);

这是一种常见且受鼓励的模式,因为 D return Voldemort types(无法命名的类型)中有许多函数。

在您的示例中,类型是 RedBlackTree!int。如果您不使用 IDE,发现类型的一种简单方法是 pragma(msg, typeof(<functionCall>(<args>)));。 此外,我应该注意,声明一个 RedBlackTree 数组适用于 auto:

auto arr = [redBlackTree(1, 2), redBlackTree(3, 4)];

如需更多帮助,请随时post提供失败的确切代码。

类型(使用 long 而不是 int)是 RedBlackTree!long,这里有一些例子。请记住,您必须使用 new 来初始化 class。

import std.stdio;
import std.container;

RedBlackTree!long rbtree;
RedBlackTree!long[2] rbarray;
RedBlackTree!long[] rbdynamicarr;
RedBlackTree!long[][] rbmat;

void main() {
    rbtree.writeln;
    rbtree = new RedBlackTree!long;
    rbtree.insert(3);
    rbtree.writeln;

    rbarray.writeln;
    rbarray = new RedBlackTree!long[2];
    rbarray.writeln;

    rbdynamicarr.writeln;
    int n = 3;
    rbdynamicarr = new RedBlackTree!long[n];
    rbdynamicarr.writeln;

    rbmat.writeln;
    int m = 2;
    rbmat = new RedBlackTree!long[][](n,m);
    rbmat.writeln;

    alias RBTree = typeof(redBlackTree!long(1L));
    RBTree rbalias;
    rbalias = new RBTree;
    rbalias.writeln;

    RBTree[3] crayola;
    crayola.writeln;

    typeid(redBlackTree(1)).writeln;
    RedBlackTree!(long, "a < b", false) hola;
    hola = new RedBlackTree!(long, "a < b", false);
    hola.writeln;
}