Data structures 为什么D缺少容器类? 我习惯C++的STL容器。D有数组、关联数组和字符串,但其余的在哪里?我知道std.container,但据我所知,它只有一个容器,红黑树,如果我需要类似于std::set的东西,我可以使用它。但是,如果我需要一个列表?我应该使用数组吗

Data structures 为什么D缺少容器类? 我习惯C++的STL容器。D有数组、关联数组和字符串,但其余的在哪里?我知道std.container,但据我所知,它只有一个容器,红黑树,如果我需要类似于std::set的东西,我可以使用它。但是,如果我需要一个列表?我应该使用数组吗,data-structures,d,Data Structures,D,std::vector->array std::deque->? std::queue->? std::stack->?可能是数组和std.container函数? std::priority\u队列->二进制堆 std::list->? std::set->std.container RedBlackTree std::multiset->? std::无序\u集->? std::map->关联数组 std::multimap->? std::无序地图->? 是否有任何计划来支持缺失的任何一个

std::vector
->
array

std::deque
->

std::queue
->

std::stack
->
?可能是数组和std.container函数?

std::priority\u队列
->
二进制堆

std::list
->

std::set
->
std.container RedBlackTree

std::multiset
->

std::无序\u集
->

std::map
->
关联数组

std::multimap
->

std::无序地图
->


是否有任何计划来支持缺失的任何一个?

容器在D中的库开发方面是一项任务,但是没有人在Phobos中得到了一个全面的容器库,因为没有人同意设计应该是什么,以及每个为标准库做出贡献的人(标准库的发展非常迅速)发现了更多有趣的事情要做

std::vector
->
array
如您所说

std::dequeue
std::queue
:不幸的是,我们还没有

std::stack
:这可以在
SList
或数组上实现

std::set
:这可以在
RedBlackTree
上实现

std::multiset
:我认为
RedBlackTree
可以设置为允许重复

std::unordered_set
:这可以在内置关联数组的顶部实现。要在内置AA之上实现它,请使用
byte[0][SomeType]

std::map
:可以在
RedBlackTree
上轻松实现

std::multimap
:您可能可以为此使用数组的关联数组


std\uu unordered\u map
:使用内置关联数组。

我认为将更多容器放入std.container的主要障碍是Andrei Alexandrescu一直在研究如何最好地处理自定义分配器,他希望在实现所有各种容器类型之前做到这一点,因为否则一旦他这样做了,它将需要大量的代码更改

在此期间,您有内置数组和关联数组,std.container包含
Array
(本质上是
std::vector
),
SList
(是一个单链接列表),
RedBlackTree
(可用于使用树的任何类型的集合或映射-这是STL的各种集合和映射类型所做的),以及
BinaryHeap


因此,毫无疑问,这种情况需要改善(而且会改善),但我不知道要多久。最终,std.container应该有与所有STL容器类型相对应的容器类型。

std.container
有一个单链接列表(
SList
)。对于多重映射,您可以只使用数组的关联数组。对于无序集,您可以使用具有伪值类型(
bool
void[0]
)的关联数组。请注意,关联数组是无序的。Deques、Queue和stacks非常简单(但效率低下)通过数组和切片/连接操作符进行模拟。分配器应该是Phobos review队列中接下来的几件事情之一,主要是因为Andrei已经提出了一个设计,我已经将其用于RegionAllocator,并在GC分配器周围实现了一个简单的包装器,以证明该设计与mor一起工作不止一个分配方案。作为临时解决方案如何?如果您想使用它,数据集合可以正常工作,但它显然不是标准库的一部分。但是它是一个坚实的库。@JonathanMDavis std.Array是一个结构而std.RedBlackTree是一个类,有什么好的理由吗?最初,所有std.container都将是ref-c装载结构,然后它将是最终的类。随着自定义分配器的添加,我不太确定我们将得到哪一个。无论是
Array
还是
RedBlackTree
都可能在将来发生变化。
RedBlackTree
曾经是一个结构,并且根据计划被转换为类,这不仅仅是因为我们在那里继续,但因为
RedBlackTree.init有问题。它只是作为一个类更好。但是
Array
从未更改过,我不知道是否会更改。这取决于自定义分配器设计的情况。
std::dequeue
std::queue
-->
std.container.Array