RedBlackTree
- реализация Фобоса.Проблема, с которой вы сталкиваетесь с removeKey
, заключается в том, что она разнообразна.Для удаления потребуется либо массив ключей, либо несколько ключей (например, removeKey(arr)
или removeKey(key1, key2, key3)
).string
- это массив неизменяемых символов, поэтому он пытается создать экземпляр removeKey
с char
вместо string
, что не работает, потому что ваше дерево содержит строки, а не символы.У вас не возникло бы такого рода проблем, если бы вы имели дело с RedBlackTree
целыми числами или любым другим типом, не являющимся массивом.
Что вам нужно сделать, это либо дать ему массив строк, либо создать экземплярэто напрямую, то есть removeKey([s])
или removeKey!string(s)
.
Кстати, std.container пошел по пути именования своих типов контейнеров, основываясь на их структуре данных, а не на том, для чего они используются.Итак, когда вы говорите, что вам не нужно красно-черное дерево, это не совсем верно.Вы хотите набор.Тебе просто все равно, как это реализовано.Два типичных способа реализации наборов включают использование красно-черного дерева или хеш-таблицы.Итак, RedBlackTree
дает вам один способ получить сет.Просто он назван в честь своей структуры данных, а не как вы можете его использовать, поэтому, если вы ищете имя контейнера Set
в std.container, вы не найдете его.
EDIT : отчет об ошибке существует для этого, и исправление было отправлено.Таким образом, в будущем выпуске dmd должна быть возможность передать string
в removeKey
без необходимости его непосредственного создания или передачи string
внутрь массива.