为什么D缺少容器类?

时间:2011-08-23 14:04:38

标签: data-structures d

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

std::vector - > array

std::deque - > ?

std::queue - > ?

std::stack - > ? maybe array and std.container functions ?

std::priority_queue - > BinaryHeap

std::list - > ?

std::set - > std.container RedBlackTree

std::multiset - > ?

std::unordered_set - > ?

std::map - > associative arrays

std::multimap - > ?

std::unordered_map - > ?

有没有计划支持任何遗失?

2 个答案:

答案 0 :(得分:19)

我认为将更多容器装入std.container的主要原因是Andrei Alexandrescu已经整理出如何最好地处理自定义分配器,并且他希望在实现所有各种容器类型之前这样做,否则一旦他做了,就需要进行大量的代码更改。

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

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

答案 1 :(得分:9)

容器在D中的库开发方面是一个todo,但是没有人在Phobos中获得一个全面的容器库,因为没有人同意设计应该是什么,以及每个为标准库做出贡献的人(已经非常迅速地增长)找到了更多有趣的事情。

std::vector - >正如你所说array

std::dequeuestd::queue:遗憾的是,我们还没有。

std::stack:这可以在SList或数组之上轻松实现。

std::set:这可以在RedBlackTree之上轻松实现。

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

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

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

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

std__unordered_map:使用内置关联数组。