Мне нужен контейнер, который будет содержать отсортированные целые числа, чтобы можно было быстро выполнить поиск, если целое число уже есть в этом наборе. Есть ли в Delphi коллекция для этого, похожая на C++ std::set
?
Сначала я подумал, что Delphi Set
— это то, что мне нужно, но когда я попробовал:
Type
TIntSet = set of Integer;
Я получаю сообщение об ошибке:
[Ошибка dcc64] Наборы могут содержать не более 256 элементов
В частности, Delphi или любой язык Object Pascal (Free Pascal, Oxygene и, конечно же, Delphi)?
Существует System.Generics.Collections.TList
Связанный: coderhelper.com/a/66017283/282848
Вам нужно их отсортировать? Или вам просто нужен быстрый доступ?
Такая коллекция обычно реализуется через красно-черное дерево, и Delphi не имеет для них встроенной поддержки.
Будете ли вы часто обновлять коллекцию или она будет использоваться в режиме только для чтения после ее создания?
@Olivier Буду обновлять не так часто, но и не один раз. Большую часть времени я буду проверять, содержит ли он число.
@DavidHeffernan последний. Большую часть времени я буду проверять, содержит ли он определенное число. И время от времени будет добавляться новый элемент.
Вы можете использовать общий набор из spring4d, который представляет собой хешированную коллекцию, дающую доступ O (1). Эта библиотека также имеет хорошую реализацию красно-черного дерева, но я не думаю, что вам это нужно, поскольку вам не нужна сортировка коллекции.
Если вам не нужна сортировка, то почему вы сказали обратное в вопросе? Вы можете просто использовать
TDictionary
(это хэш-таблица).Ваш фактический вопрос является дубликатом этот.
@Olivier, поскольку мне не нужна пара ключ-значение, я не думал об использовании TDictionary.
TBits из модуля System.Classes может быть хорошим выбором