D 如何声明一组红黑树?

D 如何声明一组红黑树?,d,D,当我想初始化一棵红黑树时,我会按照文档中的方法进行初始化 auto rbt = redBlackTree(1,2,3,4) 但是,如果我想在全球范围内声明它,或者创建一个红黑树数组,我不知道怎么做,文档也帮不上忙。我尝试过各种方法,经常会遇到类似的错误:redBlackTree!int用作类型您能帮我吗?如果我知道该放什么而不是auto,也就是说,如果我知道redBlackTree的类型,我就可以这样做 我想在全局范围内声明一棵红黑树,或者声明一个需要声明其类型的数组,我想执行如下操作: ty

当我想初始化一棵红黑树时,我会按照文档中的方法进行初始化

auto rbt = redBlackTree(1,2,3,4)
但是,如果我想在全球范围内声明它,或者创建一个红黑树数组,我不知道怎么做,文档也帮不上忙。我尝试过各种方法,经常会遇到类似的错误:
redBlackTree!int用作类型
您能帮我吗?如果我知道该放什么而不是
auto
,也就是说,如果我知道
redBlackTree
的类型,我就可以这样做


我想在全局范围内声明一棵红黑树,或者声明一个需要声明其类型的数组,我想执行如下操作:

type rbt;
void main() {
    rbt.insert(3);
}
或者这个:

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

您不需要知道
redBlackTree
的类型。您可以在编译时使用
typeof
查询:

alias RBTree = typeof(redBlackTree(1));
RBTree rbt = redBlackTree(1, 2, 3);
这是一种常见且受鼓励的模式,因为D中的许多函数都返回(无法命名的类型)

在您的示例中,类型是
RedBlackTree!int
。如果不使用IDE,发现类型的简单方法是
pragma(msg,typeof(())。
此外,我应该注意到,声明RedBlackTree数组与
auto
一起工作:

auto arr = [redBlackTree(1, 2), redBlackTree(3, 4)];
要获得更多帮助,请随时发布失败的确切代码。

类型(使用long而不是int)是
RedBlackTree!long
,下面是一些示例。请记住,必须使用
new
初始化类

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;
}
导入标准stdio;
进口标准集装箱;
红黑树!长尾树;
红黑树!长[2]rbaray;
红黑树!长[]RBR;
红黑树!长[][]rbmat;
void main(){
rbtree.writeln;
rbtree=新红黑树!长;
rbtree.插入(3);
rbtree.writeln;
rbarray.writeln;
rbarray=新红黑树!长[2];
rbarray.writeln;
rbdynamicarr.writeln;
int n=3;
rbdynamicarr=新红黑树!长[n];
rbdynamicarr.writeln;
rbmat.writeln;
int m=2;
rbmat=新红黑树!长[][](n,m);
rbmat.writeln;
别名RBTree=typeof(redBlackTree!long(1L));
RBTree-rbalias;
rbalias=新RBTree;
rbalias.writeln;
RBTree[3]crayola;
克雷约拉·莱特;
typeid(redBlackTree(1)).writeln;
红黑树!(长,“a
我想声明全局范围内的红黑树或红黑树数组,如下所示:
键入[2]rbt\u数组
其中type是红黑树的类型带有两个元素的静态数组将被声明为
RBTree[2]r=[redBlackTree(1,2),redBlackTree(3,4)]
或者你更舒服一点
自动r=[redBlackTree(1,2),redBlackTree(3,4)]。staticArray
。这两种分配的类型都是
RedBlackTree!(int,“a
。您可以在中看到这两个示例。