|
|
|
---|
    TSortedCollection - это специализированный производный от TCollection тип, реализующий наборы, отсортированные по ключу. Сортировка реализуется виртуальным методом Compare, который вы переопределяете для определения собственного порядка сортировки элементов. При добавлении новых элементов они автоматически включаются в порядке, заданном методом Compare. Элементы можно находить с помощью метода двоичного поиска Search. Если Compare требуется дополнительная информация, виртуальный метод KeyOf, возвращающий указатель на Compare, также можно переопределить.
    TSortedCollection реализует отсортированные наборы с дублируемыми ключами и без них. Поле Duplicates управляет разрешением дублирования. По умолчанию оно равно False. Это указывает, что дублирующиеся ключи не разрешаются, но после создания отсортированного набора вы можете установить Duplicates в True, что позволит использовать в наборе элементы с дублирующимися ключами.
    Определяет, будет ли набор воспринимать элементы с
дублируемыми ключами. По умолчанию Duplicates имеет значение False, и
вызов метода Insert для элемента, уже содержащегося в наборе, не
приводит к включению нового элемента. В наборе будет содержаться
только первый элемент с данными ключом.
    Если вы установите Duplicates в True, дублирующие элементы
вставляются в набор непосредственно перед первым элементом с этим
ключом.
    Ниже описываются методы, определенные в данном объекте.
    Строит и загружает отсортированный набор из потока S,
вызывая сначала метод TCollection.Load, а затем считывая поле
Duplicates TSortedCollection.
    См. также: TCollection.Load.
    Compare - это абстрактный метод, который должен
переопределяться в наследующих типах. В Compare должны сравниваться два
значения ключей и возвращаться следующий результат: -1, если Key1
< Key2; 0 если Key1 = Key2 и 1, если Key1 > Key2.
    Key1 и Key2 - это значения указателей, выделенные из
соответствующих элементов наборов методом TSortedCollection.KeyOf.
Метод TSortedCollection.Search реализует двоичный поиск по
элементам набора, используя для сравнения элементов метода Compare.
    См. также: TSortedCollection.KeyOf,
TSortedCollection.Compare.
    Использует TSortedCollection.Search для определения индекса
данного элемента. Если элемента в наборе нет, то IndexOf
возвращает -1. Фактической реализацией TSortedCollection.IndexOf
является:
    См. также: TSortedCollection.Search.
    Если целевой элемент в отсортированном наборе не найден, то
он включается в текущей позиции индекса. Для определения наличия
или отсутствия элемента вызывает TSortedCollection.Search. Если
элемент отсутствует, то включает его. Фактической реализацией
TSortedCollection.Insert является:
    См. также: TSortedCollection.Search.
    По заданному элементу набора Item функция KeyOf должна
возвращать соответствующий ключ элемента. По умолчанию
TSortedCollection.KeyOf просто возвращает Item. KeyOf
переопределяется в тех случаях, когда ключ не является самим элементом.
    См. также: TSortedCollection.IndexOf.
Поля
Duplicates: Boolean;
Методы
Load
constructor Load(var S: Stream);
Compare (всегда переопределяется)
function Compare(Key1, Key2: Pointer): Integer; virtual;
IndexOf (никогда не переопределяется)
function IndexOf(Item: Pointer): Integer; virtual;
if Search(KeyOf(Item), I) then IndexOf := I
else IndexOf := -1;
Insert (никогда не переопределяется)
procedure Insert(Item: Pointer); virtual;
if not Search(KeyOf(Item), I) or Duplicates then
AtInsert(I, Item);
KeyOf (иногда переопределяется)
function KeyOf(Item: Pointer): Pointer: virtual;