Skip to content

Latest commit

 

History

History
51 lines (36 loc) · 2.49 KB

File metadata and controls

51 lines (36 loc) · 2.49 KB

🌳 SortedDictionary

Сбалансированное бинарное дерево поиска, вдохновлённое SortedDictionary из C#. Хранит пары ключ-значение в отсортированном порядке, поддерживает вставку, удаление, поиск и преобразование в список. 🚀


🔥 Основные методы

  • Insert(KeyType key, const T& data) — Добавляет пару ключ-значение.
  • Remove(KeyType key) — Удаляет элемент по ключу.
  • Find(KeyType key) — Возвращает указатель на значение по ключу (или nullptr, если не найдено).
  • ToList() — Возвращает список всех пар ключ-значение в порядке ключей.
  • CountNodes() — Возвращает статистику количество узлов на каждом уровне (для анализа структуры).

💡 Зависимости: Всё импортируется через #include "cs/types.h". Ничего лишнего!


🎯 Пример

#include "cs/types.h"

int main() {
    SortedDictionary<int, String> dict;
    dict.Insert(3, "three");
    dict.Insert(1, "one");
    dict.Insert(2, "two");

    dict.Insert(4, "four");
    dict.Insert(5, "five");

    // [(1, one), (2, two), (3, three), (4, four), (5, five)]

    dict.Remove(1);
    std::cout << dict << '\n';  // [(2, two), (3, three), (4, four), (5, five)]
    std::cout << dict.CountNodes() << '\n'; // [(0, 1), (1, 2), (2, 1)]
    return 0;
}

💡 Особенности

  • Реализовано как AVL-дерево для автоматической балансировки.
  • Ключи хранятся в отсортированном порядке (требуется поддержка сравнения для KeyType).
  • Поддерживает любые типы для ключей и значений, если ключи можно сравнивать.
  • Эффективные операции вставки, удаления и поиска благодаря сбалансированности.
  • Метод ToList возвращает упорядоченный список пар для удобной обработки.
  • Запрещены копирование и присваивание для безопасности работы с деревом.