Подтвердить что ты не робот

Почему D отсутствует классы контейнеров?

Я использую контейнеры С++ STL. D имеет массивы, ассоциативные массивы и строки, но где же остальные? Я знаю о std.container, но, насколько я могу судить, у него есть только один контейнер, красно-черное дерево, которое я мог бы использовать, если мне нужно что-то похожее на std::set. Но что, если мне нужен list? Я должен использовать массив вместо?

std::vectorarray

std::deque?

std::queue?

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

std::priority_queueBinaryHeap

std::list?

std::setstd.container RedBlackTree

std::multiset?

std::unordered_set?

std::mapassociative arrays

std::multimap?

std::unordered_map?

Есть ли какие-либо планы по поддержке любого из отсутствующих?

4b9b3361

Ответ 1

Я считаю, что основным удержанием для получения большего количества контейнеров в std.container является то, что Андрей Александреску разбирался в том, как лучше справляться с пользовательскими распределителями, и он хочет это сделать, прежде чем внедрять все типы контейнеров, потому что в противном случае он будет требовать много изменений кода, как только он это сделает.

В то же время у вас есть встроенные массивы и ассоциативные массивы, а std.container содержит Array (который по существу std::vector), SList (который является односвязным списком), RedBlackTree (который может использоваться для любого типа набора или карты, в котором используется дерево - это то, что делают различные типы STL и типы карт) и BinaryHeap.

Итак, нет никаких сомнений в том, что ситуация должна быть улучшена (и будет), но я не знаю, как скоро. В конце концов, std.container должен иметь типы контейнеров, которые соответствуют всем типам контейнеров STL.

Ответ 2

Контейнеры являются todo с точки зрения развития библиотеки в D, но никто не получил полную библиотеку контейнеров в Phobos, потому что никто не согласен с тем, что должен быть дизайн, и все, кто вносит вклад в стандартную библиотеку (которая быстро растет) нашел более интересные вещи для работы.

std::vectorarray как вы говорите

std::dequeue, std::queue: У нас пока нет, к сожалению.

std::stack: это может быть тривиально реализовано поверх SList или массива.

std::set: это может быть тривиально реализовано поверх RedBlackTree.

std::multiset: Я думаю, что RedBlackTree можно установить для дублирования.

std::unordered_set: это может быть тривиально реализовано поверх встроенного ассоциативного массива. Чтобы реализовать его поверх встроенного АА, используйте byte[0][SomeType].

std::map: может быть тривиально реализовано поверх RedBlackTree.

std::multimap: Вы можете использовать для этого массивы ассоциативных массивов.

std__unordered_map: Используйте встроенные ассоциативные массивы.