Поделиться через


Класс CRBTree

Этот класс предоставляет методы для создания и использования дерева Red-Black.

Синтаксис

template <typename K,
          typename V,
          class KTraits = CElementTraits<K>,
          class VTraits = CElementTraits<V>>
class CRBTree

Параметры

K
Тип ключевого элемента.

V
Тип элемента value.

KTraits
Код, используемый для копирования или перемещения ключевых элементов. Дополнительные сведения см. в классе CElementTraits.

Виртуальные признаки
Код, используемый для копирования или перемещения элементов значения.

Участники

Общедоступные определения типов

Имя Описание
CRBTree::KINARGTYPE Тип, используемый при передаче ключа в качестве входного аргумента.
CRBTree::KOUTARGTYPE Тип, используемый при возврате ключа в качестве выходного аргумента.
CRBTree::VINARGTYPE Тип, используемый при передаче значения в качестве входного аргумента.
CRBTree::VOUTARGTYPE Тип, используемый при передаче значения в качестве выходного аргумента.

Открытые классы

Имя Описание
Класс CRBTree::CPair Класс, содержащий элементы ключа и значения.

Открытые конструкторы

Имя Описание
CRBTree::~CRBTree Деструктор

Открытые методы

Имя Описание
CRBTree::FindFirstKeyAfter Вызовите этот метод, чтобы найти позицию элемента, использующего следующий доступный ключ.
CRBTree::GetAt Вызовите этот метод, чтобы получить элемент в заданной позиции в дереве.
CRBTree::GetCount Вызовите этот метод, чтобы получить количество элементов в дереве.
CRBTree::GetHeadPosition Вызовите этот метод, чтобы получить значение позиции для элемента в голове дерева.
CRBTree::GetKeyAt Вызовите этот метод, чтобы получить ключ из заданной позиции в дереве.
CRBTree::GetNext Вызовите этот метод, чтобы получить указатель на элемент, хранящийся в объекте CRBTree , и перейти к следующему элементу.
CRBTree::GetNextAssoc Вызовите этот метод, чтобы получить ключ и значение элемента, хранящегося в карте, и перейти к следующему элементу.
CRBTree::GetNextKey Вызовите этот метод, чтобы получить ключ элемента, хранящегося в дереве, и перейти к следующему элементу.
CRBTree::GetNextValue Вызовите этот метод, чтобы получить значение элемента, хранящегося в дереве, и перейти к следующему элементу.
CRBTree::GetPrev Вызовите этот метод, чтобы получить указатель на элемент, хранящийся в объекте CRBTree , а затем обновите положение до предыдущего элемента.
CRBTree::GetTailPosition Вызовите этот метод, чтобы получить значение позиции для элемента в хвосте дерева.
CRBTree::GetValueAt Вызовите этот метод, чтобы получить значение, хранящееся в заданной позиции в объекте CRBTree .
CRBTree::IsEmpty Вызовите этот метод для проверки пустого объекта дерева.
CRBTree::RemoveAll Вызовите этот метод, чтобы удалить все элементы из CRBTree объекта.
CRBTree::RemoveAt Вызовите этот метод, чтобы удалить элемент в заданной позиции в объекте CRBTree .
CRBTree::SetValueAt Вызовите этот метод, чтобы изменить значение, хранящееся в заданной позиции в объекте CRBTree .

Замечания

Дерево Red-Black — это дерево двоичного поиска, которое использует дополнительную битовую информацию для каждого узла, чтобы гарантировать, что она остается "сбалансированной", т. е. высота дерева не увеличивается непропорционально большой и влияет на производительность.

Этот класс шаблона предназначен для использования CRBMap и CRBMultiMap. Основная часть методов, составляющих эти производные классы, предоставляются CRBTree.

Более подробное обсуждение различных классов коллекций и их характеристик и характеристик производительности см. в классах коллекций ATL.

Требования

Заголовок: atlcoll.h

Класс CRBTree::CPair

Класс, содержащий элементы ключа и значения.

class CPair : public __POSITION

Замечания

Этот класс используется методами CRBTree::GetAt, CRBTree::GetNext и CRBTree::GetPrev для доступа к элементам ключа и значения, хранящимся в структуре дерева.

Члены приведены следующим образом:

Элемент данных Description
m_key Элемент данных, в котором хранится ключевой элемент.
m_value Элемент данных, в котором хранится элемент value.

CRBTree::~CRBTree

Деструктор

~CRBTree() throw();

Замечания

Освобождает все выделенные ресурсы. Вызывает CRBTree::RemoveAll для удаления всех элементов.

CRBTree::FindFirstKeyAfter

Вызовите этот метод, чтобы найти позицию элемента, использующего следующий доступный ключ.

POSITION FindFirstKeyAfter(KINARGTYPE key) const throw();

Параметры

key
Значение ключа.

Возвращаемое значение

Возвращает значение позиции элемента, использующего следующий доступный ключ. Если больше элементов нет, возвращается значение NULL.

Замечания

Этот метод упрощает обход дерева без необходимости вычислять значения позиции заранее.

CRBTree::GetAt

Вызовите этот метод, чтобы получить элемент в заданной позиции в дереве.

CPair* GetAt(POSITION pos) throw();
const CPair* GetAt(POSITION pos) const throw();
void GetAt(POSITION pos, KOUTARGTYPE key, VOUTARGTYPE value) const;

Параметры

pos
Позиция.

key
Переменная, получающая ключ.

значение
Переменная, получающая значение.

Возвращаемое значение

Первые две формы возвращают указатель на CPair. Третья форма получает ключ и значение для заданной позиции.

Замечания

Значение позиции можно определить ранее с помощью вызова метода, например CRBTree::GetHeadPosition или CRBTree::GetTailPosition.

В сборках отладки произойдет сбой утверждения, если pos равен NULL.

CRBTree::GetCount

Вызовите этот метод, чтобы получить количество элементов в дереве.

size_t GetCount() const throw();

Возвращаемое значение

Возвращает количество элементов (каждая пара "ключ-значение" является одним элементом), хранящимся в дереве.

CRBTree::GetHeadPosition

Вызовите этот метод, чтобы получить значение позиции для элемента в голове дерева.

POSITION GetHeadPosition() const throw();

Возвращаемое значение

Возвращает значение позиции элемента в верхней части дерева.

Замечания

Возвращаемое GetHeadPosition значение можно использовать с такими методами, как CRBTree::GetKeyAt или CRBTree::GetNext для обхода дерева и получения значений.

CRBTree::GetKeyAt

Вызовите этот метод, чтобы получить ключ из заданной позиции в дереве.

const K& GetKeyAt(POSITION pos) const throw();

Параметры

pos
Позиция.

Возвращаемое значение

Возвращает ключ, хранящийся в позиции pos в дереве.

Замечания

Если значение позиции не является допустимым, результаты непредсказуемы. В сборках отладки произойдет сбой утверждения, если pos равен NULL.

CRBTree::GetNext

Вызовите этот метод, чтобы получить указатель на элемент, хранящийся в объекте CRBTree , и перейти к следующему элементу.

const CPair* GetNext(POSITION& pos) const throw();
CPair* GetNext(POSITION& pos) throw();

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

Возвращаемое значение

Возвращает указатель на следующее значение CPair в дереве.

Замечания

Счетчик позиции pos обновляется после каждого вызова. Если извлеченный элемент является последним в дереве, pos имеет значение NULL.

CRBTree::GetNextAssoc

Вызовите этот метод, чтобы получить ключ и значение элемента, хранящегося в карте, и перейти к следующему элементу.

void GetNextAssoc(
    POSITION& pos,
    KOUTARGTYPE key,
    VOUTARGTYPE value) const;

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

key
Параметр шаблона, указывающий тип ключа дерева.

значение
Параметр шаблона, указывающий тип значения дерева.

Замечания

Счетчик позиции pos обновляется после каждого вызова. Если извлеченный элемент является последним в дереве, pos имеет значение NULL.

CRBTree::GetNextKey

Вызовите этот метод, чтобы получить ключ элемента, хранящегося в дереве, и перейти к следующему элементу.

const K& GetNextKey(POSITION& pos) const throw();

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

Возвращаемое значение

Возвращает ссылку на следующий ключ в дереве.

Замечания

Обновляет счетчик текущей позиции, pos. Если в дереве больше нет записей, счетчик позиции имеет значение NULL.

CRBTree::GetNextValue

Вызовите этот метод, чтобы получить значение элемента, хранящегося в дереве, и перейти к следующему элементу.

const V& GetNextValue(POSITION& pos) const throw();
V& GetNextValue(POSITION& pos) throw();

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

Возвращаемое значение

Возвращает ссылку на следующее значение в дереве.

Замечания

Обновляет счетчик текущей позиции, pos. Если в дереве больше нет записей, счетчик позиции имеет значение NULL.

CRBTree::GetPrev

Вызовите этот метод, чтобы получить указатель на элемент, хранящийся в объекте CRBTree , а затем обновите положение до предыдущего элемента.

const CPair* GetPrev(POSITION& pos) const throw();
CPair* GetPrev(POSITION& pos) throw();

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

Возвращаемое значение

Возвращает указатель на предыдущее значение CPair , хранящееся в дереве.

Замечания

Обновляет счетчик текущей позиции, pos. Если в дереве больше нет записей, счетчик позиции имеет значение NULL.

CRBTree::GetTailPosition

Вызовите этот метод, чтобы получить значение позиции для элемента в хвосте дерева.

POSITION GetTailPosition() const throw();

Возвращаемое значение

Возвращает значение позиции элемента в хвосте дерева.

Замечания

Возвращаемое GetTailPosition значение можно использовать с такими методами, как CRBTree::GetKeyAt или CRBTree::GetPrev для обхода дерева и получения значений.

CRBTree::GetValueAt

Вызовите этот метод, чтобы получить значение, хранящееся в заданной позиции в объекте CRBTree .

const V& GetValueAt(POSITION pos) const throw();
V& GetValueAt(POSITION pos) throw();

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

Возвращаемое значение

Возвращает ссылку на значение, хранящееся в заданной позиции объекта CRBTree .

CRBTree::IsEmpty

Вызовите этот метод для проверки пустого объекта дерева.

bool IsEmpty() const throw();

Возвращаемое значение

Возвращает значение TRUE, если дерево пусто, значение FALSE в противном случае.

CRBTree::KINARGTYPE

Тип, используемый при передаче ключа в качестве входного аргумента.

typedef KTraits::INARGTYPE KINARGTYPE;

CRBTree::KOUTARGTYPE

Тип, используемый при возврате ключа в качестве выходного аргумента.

typedef KTraits::OUTARGTYPE KOUTARGTYPE;

CRBTree::RemoveAll

Вызовите этот метод, чтобы удалить все элементы из CRBTree объекта.

void RemoveAll() throw();

Замечания

Очищает CRBTree объект, освобождая память, используемую для хранения элементов.

CRBTree::RemoveAt

Вызовите этот метод, чтобы удалить элемент в заданной позиции в объекте CRBTree .

void RemoveAt(POSITION pos) throw();

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

Замечания

Удаляет пару "ключ-значение", хранящуюся в указанной позиции. Память, используемая для хранения элемента, освобождается. Позиция, на которую ссылается pos, становится недопустимой, и в то время как позиция любых других элементов в дереве остается допустимой, они не обязательно сохраняют тот же порядок.

CRBTree::SetValueAt

Вызовите этот метод, чтобы изменить значение, хранящееся в заданной позиции в объекте CRBTree .

void SetValueAt(POSITION pos, VINARGTYPE value);

Параметры

pos
Счетчик позиции, возвращаемый предыдущим вызовом методов, таких как CRBTree::GetHeadPosition или CRBTree::FindFirstKeyAfter.

значение
Значение, добавляемое в CRBTree объект.

Замечания

Изменяет элемент значения, хранящийся в заданной позиции в объекте CRBTree .

CRBTree::VINARGTYPE

Тип, используемый при передаче значения в качестве входного аргумента.

typedef VTraits::INARGTYPE VINARGTYPE;

CRBTree::VOUTARGTYPE

Тип, используемый при передаче значения в качестве выходного аргумента.

typedef VTraits::OUTARGTYPE VOUTARGTYPE;

См. также

Общие сведения о классе