Отсутствие древовидных контейнеров в C STL
Стандартная библиотека шаблонов C (STL) не предлагает никаких «деревовидных» контейнеров . Это упущение вызывает вопрос: почему? И какие альтернативы подходят?
Почему в STL нет древовидных контейнеров?
Есть две причины, по которым может потребоваться древовидная структура данных:
1. Иерархическое представление объектов: Моделирование древовидной иерархии объектов в коде с использованием древовидной структуры.
2. Характеристики эффективного доступа: Обеспечение быстрого доступа к элементам на основе отношений упорядочения, аналогично бинарным деревьям поиска.
Альтернативы для древовидных структур
Упорядоченные ассоциативные контейнеры:
Эти контейнеры эффективно работают как сбалансированные двоичные деревья, гарантируя эффективное логарифмическое время доступа для вставок, удалений и поиска. Они также предоставляют дополнительные преимущества, такие как:
Пример:
Если вы хотите сохранить иерархию сотрудников с генеральным директором в корне и несколькими уровнями подчиненных, можно использовать std::map<:string std::vector>>. Здесь ключами карты будут имена сотрудников, а связанные векторы будут содержать имена их непосредственных подчиненных.
Заключение
Хотя C STL не предоставляет напрямую с древовидными контейнерами, он предлагает подходящие альтернативы как для иерархического представления, так и для эффективных характеристик доступа. Библиотека графов Boost может обрабатывать сложные графовые структуры, а упорядоченные ассоциативные контейнеры обеспечивают древовидный доступ с помощью универсального и хорошо зарекомендовавшего себя интерфейса.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3