Есть ли в Delphi отсортированная коллекция, например std::set в С++?

avatar
Bruice
8 августа 2021 в 20:03
168
0
0

Мне нужен контейнер, который будет содержать отсортированные целые числа, чтобы можно было быстро выполнить поиск, если целое число уже есть в этом наборе. Есть ли в Delphi коллекция для этого, похожая на C++ std::set?

Сначала я подумал, что Delphi Set — это то, что мне нужно, но когда я попробовал:

Type
  TIntSet = set of Integer;

Я получаю сообщение об ошибке:

[Ошибка dcc64] Наборы могут содержать не более 256 элементов

Источник
Eljay
8 августа 2021 в 20:10
0

В частности, Delphi или любой язык Object Pascal (Free Pascal, Oxygene и, конечно же, Delphi)?

LU RD
8 августа 2021 в 20:11
0

Существует System.Generics.Collections.TList

Andreas Rejbrand
8 августа 2021 в 20:21
0

Связанный: coderhelper.com/a/66017283/282848

David Heffernan
9 августа 2021 в 00:53
0

Вам нужно их отсортировать? Или вам просто нужен быстрый доступ?

Olivier
9 августа 2021 в 07:31
0

Такая коллекция обычно реализуется через красно-черное дерево, и Delphi не имеет для них встроенной поддержки.

Olivier
9 августа 2021 в 07:41
0

Будете ли вы часто обновлять коллекцию или она будет использоваться в режиме только для чтения после ее создания?

Bruice
9 августа 2021 в 08:59
0

@Olivier Буду обновлять не так часто, но и не один раз. Большую часть времени я буду проверять, содержит ли он число.

Bruice
9 августа 2021 в 09:00
0

@DavidHeffernan последний. Большую часть времени я буду проверять, содержит ли он определенное число. И время от времени будет добавляться новый элемент.

David Heffernan
9 августа 2021 в 09:03
0

Вы можете использовать общий набор из spring4d, который представляет собой хешированную коллекцию, дающую доступ O (1). Эта библиотека также имеет хорошую реализацию красно-черного дерева, но я не думаю, что вам это нужно, поскольку вам не нужна сортировка коллекции.

Olivier
9 августа 2021 в 09:06
0

Если вам не нужна сортировка, то почему вы сказали обратное в вопросе? Вы можете просто использовать TDictionary (это хэш-таблица).

Olivier
9 августа 2021 в 09:14
0

Ваш фактический вопрос является дубликатом этот.

Bruice
9 августа 2021 в 09:15
0

@Olivier, поскольку мне не нужна пара ключ-значение, я не думал об использовании TDictionary.

USauter
27 августа 2021 в 12:54
0

TBits из модуля System.Classes может быть хорошим выбором

Ответы (0)