我习惯使用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
- > ?
有没有计划支持任何遗失?
答案 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::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__unordered_map
:使用内置关联数组。