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
。