Так что же такое контейнер map? Существует много способов реализации ассоциативных массивов, но в библиотеке STL они реализованы на основе сбалансированных бинарных деревьев; точнее говоря, они представляют собой красно-черные деревья. Мы не будем вдаваться в детали, но поскольку вам известны эти технические термины, вы можете найти их объяснение в литературе или в веб.
Также возможно вы думаете, что такая тема как http://frdesign.ru/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт frdesign.ru
диски fr design официальный сайт там представлены в широком ассортименте. Там можно узнать много интересного про диски fr design официальный сайт, где найти диски fr design официальный сайт.
Что означает вообще диски fr design официальный сайт, где есть диски fr design официальный сайт - про это написано на сайте frdesign.ru
Это важная для многих тема - диски fr design Спасибо сайту frdesign.ru за информацию диски fr design
Дерево состоит из узлов (так же как список состоит из узлов;. В объекте класса Node хранятся ключ, соответствующее ему число и указатели на два последующих узла.
Узел контейнера тар:
Ключ first Значение second
Node* left Node* right
Вот как может выглядеть объект класса map в памяти компьютера, если мы вставили в него пары (Kiwi, 100), (Quince,0), (Plum,8), (Apple,7), (Grape,2345) и (Orange,99).
Поскольку ключ хранится в члене класса Node с именем first, основное правило организации бинарного дерева поиска имеет следующий вид: left->firstfirst
Иначе говоря, для каждого узла выполняются два условия.
• Ключ его левого подузла меньше ключа узла.
• Ключ узла меньше, чем ключ правого подузла.
Можете убедиться, что эти условия выполняются для каждого узла дерева.
Это позволяет нам выполнять поиск вниз по дереву, начиная с корня. Забавно, что в литературе по компьютерным наукам деревья растут вниз. Корневым узлом является узел, содержащий пару (Orange, 99). Мы просто перемещаемся по дереву вниз, пока не найдем подходящее место. Дерево называется сбалансированным (balanced), если (как в приведенном выше примере) каждое его поддерево содержит примерно такое же количество узлов, как и одинаково удаленные от корня поддеревья. В сбалансированном дереве среднее количество узлов, которые мы должны пройти, пока не достигнем заданного узла, минимально.
В узле могут храниться дополнительные данные, которые контейнер может использовать для поддержки баланса. Дерево считается сбалансированным, если каждый узел имеет примерно одинаковое количество наследников как слева, так и справа. Если дерево, состоящее из N узлов, сбалансировано, то для обнаружения узла необходимо просмотреть не больше log2N узлов. Это намного лучше, чем N/2 узлов в среднем, которые мы должны были бы просмотреть, если бы ключи хранились в списке, а поиск выполнялся с начала (в худшем случае линейного поиска нам пришлось бы просмотреть N узлов).
|