static node_ptrget_headerconst_node_ptr &;
:
:Возвращает заголовок дерева.
:Логарифмический.
Броски:Ничего.
static node_ptrbegin_nodeconst_node_ptr &;
:
: Возвращает первый узел дерева, заголовок если дерево пустое.
: Постоянное время.
Броски: Ничего.
static node_ptrend_nodeconst_node_ptr &;
:
: Возвращает заголовок дерева.
: Постоянное время.
Броски: Ничего.
static voidswap_treenode_ptr , constnode_ptr &;;
: header1 и header2 должны быть узлами заголовка двух деревьев.
Последствия: Свопы двух деревьев. После этого заголовок функции1 будет содержать ссылки на второе дерево, а заголовок2 будет иметь ссылки на первое дерево.
Сложность: Константа.
Броски: Ничего.
static voidswap_nodesnode_ptr , const node_ptr & node2;;
: узел и узел2 не могут быть заголовочными узлами двух деревьев.
Последствия: Замена двух узлов. После этого функциональный узел 1 будет вставлен в положение узел 2 перед функцией. Узел 2 будет вставлен в положение, которое узел 1 имел перед функцией.
: Логарифмический.
Броски: Ничего.
Примечание: Эта функция разрушит инварианты упорядочивания контейнеров, если узел 1 и узел 2 не эквивалентны согласно правилам упорядочивания.
Экспериментальная функция
static voidnode_ptr, node_ptr , node_ptr , node2, node_ptr &;;
: узел 1 и узел 2 не могут быть узлами заголовка двух деревьев с заголовком header1 и header2. :2>: Swaps два узла. После этого функциональный узел 1 будет вставлен в положение узел 2 перед функцией. Узел 2 будет вставлен в положение, которое узел 1 имел перед функцией.
: Константа.
Броски: Ничего.
Примечание: Эта функция разрушит инварианты упорядочивания контейнеров, если узел 1 и узел 2 не эквивалентны согласно правилам упорядочивания.
Экспериментальная функция
static voidreplace_node& node_to_be_replaced,node_ptr & new_node;new_node;
: node_to_be_replaced должен быть вставлен в дерево, а new_node не должен быть вставлен в дерево.: Заменить узел_to_be_replaced в его положении в дереве новым_node. Дерево не нуждается в перебалансировке
Сложность: Логарифмический.
: Ничего.
Примечание: Эта функция разрушит инварианты упорядочивания контейнера, если новый_узл не эквивалентен узлу_to_be_заменен согласно правилам упорядочивания. Эта функция быстрее, чем стирание и вставка узла, так как не требуется перебалансировки и сравнения. Экспериментальная функция
static voidNode_to_be_replaced,const &header, node_ptr &new_node;new_node;new_node;
: node_to_be_replaced должен быть вставлен в дерево с заголовком "header" и new_node не должен быть вставлен в дерево. : Заменить узел_to_be_replaced в его положении в дереве с новым_node. Дерево не нуждается в перебалансировке
Сложность: Постоянный.
Броски: Ничего.
Примечание: Эта функция разрушит инварианты упорядочивания контейнеров, если новый_узл не эквивалентен узлу_to_be_, замещенному согласно правилам упорядочивания. Эта функция быстрее, чем стирание и вставка узла, поскольку не требуется перебалансировки или сравнения. Экспериментальная функция
static voidunlinknode_ptr &;
: Узел - это узел дерева, но не заголовок.Средняя сложность - постоянное время.
Броски: Ничего.
static node_ptrunlink_leftmost_without_rebalancenode_ptr;: Заголовок : Эффекты : Средняя сложность : Средние сложности: Броски: Ничего.Примечания : Эту функцию можно использовать только для вызовов unlink_leftmost_without_rebalance. Эта функция обычно используется для достижения постепенного контролируемого разрушения дерева.
static boolconstconst_node_ptr ;;
Требуется : «узел» инициализируется init(...) или init_node. : Сложность: Постоянное время.
Броски: Ничего.
static std::size_tconstconst_node_ptr &;
: Узел : Эффекты : Возвращает количество узлов поддеревья.
: Линейное время.
Броски: Ничего.
static node_ptrnext_node(const node_ptr & node;
: «узел» является узлом дерева, за исключением заголовок.
Последствия: Возвращает следующий узел дерева.
Комплексность: Среднее постоянное время.
Броски: Ничего.
static node_ptrprev_nodenode_ptr &;
: : Возвращает предыдущий узел дерева.
: Средняя постоянная времени.
Броски: Ничего.
static voidinitnode_ptr;: «Узел» не должен быть частью какого-либо дерева.: После уникальной функции (узел) == истинно.
: Константа.
: Ничего.
Узлы: Если узел вставлен в дерево, эта функция повреждает дерево.
static voidinit_headernode_ptr &header;
: Узел не должен быть частью какого-либо дерева.
Последствия: Инициализирует заголовок для представления пустого дерева. Уникальный (заголовок) == истинно.
: Константа.
Броски: Ничего.
Узлы: Если узел вставлен в дерево, эта функция портит дерево.
static node_ptrnode_ptr , const node_ptr &;;
: Заголовок должен быть заголовком дерева, z узла этого дерева и z !=заголовок.
Сложность:Амортизированное постоянное время.
Броски: Ничего.
templatetypename> booltransfer_uniqueconstnode_ptr , const comp, constnode_ptr , const& &;
: заголовки деревьев tree1 и tree2 соответственно, z незаголовочный узел дерева1. NodePtrCompare - функция сравнения дерева1..
: Переносит узел "z" с дерева1 на дерево2, если дерево1 не содержит узел, эквивалентный z.
: Верно, если узел был трассферирован, ложно иначе.
: Логарифмический.
Броски: Если сравнение бросает.
templatetypename>voidtransfer_equalnode_ptr,constcomp,constnode_ptr &node_ptr&;
: заголовки деревьев tree1 и tree2 соответственно, z незаголовочный узел tree1. NodePtrCompare — функция сравнения дерева1..
Эффекты: Перенос узла «z» с дерева1 на дерево2.
Сложность: Логарифмическая.
Броски: Если сравнение бросает.
templatetypename Cloner, Disposer> static voidcloneconst const_node_ptr , const source_header& target_header, Cloner disposer,
: «клонер» должен быть функциональным объектом, принимающим узел_ptr и возвращающим новый клонированный узел из него. «Утилизатор» должен взять узел_ptr и не должен выбрасывать.
Последствия: Сначала опустошается целевое дерево, вызывающее пустой узел::оператор()(const node_ptr &)
для каждого узла дерева, кроме заголовка.
Затем дублируется все дерево, на которое указывает «source_header» клонирование каждого узла источника с node_ptr Cloner::operator()(const node_ptr &)
для получения узлов целевого дерева. Если «клонер» бросает, то клонированные узлы-мишени утилизируются с помощью void disposer(const node_ptr &)
.
Комплексность: Линейное число элемента дерева-источника плюс число элементов дерева-мишени при вызове этой функции.
Броски: Если клонер-функтор бросит. Если это происходит, узлы-мишени удаляются.
templatetypename>voidclear_and_disposenode_ptr , disposer,;
: «disposer» должен быть объектной функцией, принимающей параметр node_ptr: Эффекты : Пустоты целевого дерева, вызывающие void disposer::оператор()(const node_ptr &)
для каждого узла дерева, кроме заголовка.
: Линейность к числу элемента дерева-источника плюс дерево-источник. Количество элементов дерева-мишени при вызове этой функции.
Броски: Если клонер-функтор бросит. Если это происходит, узлы-мишени удаляются.
template<typename KeyType, typename KeyNodePtrCompare> static node_ptrlower_bound(constconst_node_ptr , constKeyType &KeyNodePtrCompare);
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs. Последствия: Возвращает узел_ptr к первому элементу, который не меньше «ключа» по «комп» или «заголовку», если этот элемент не существует.
Комплексность: Логарифмическая.
Броски: Если «комп» бросает.
template<typename KeyType, typename KeyNodePtrCompare> static node_ptrupper_bound(constconst_node_ptr , constKeyType &KeyNodePtrCompare);
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs. Последствия: Возвращает узел_ptr к первому элементу, который больше «ключа» по «комп» или «заголовку», если этот элемент не существует.
Комплексность: Логарифмическая.
Броски: Если «комп» бросает.
template<typename KeyType, typename KeyNodePtrCompare> static node_ptrfind(const_node_ptr & constKeyType & KeyNodePtrCompare);
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs. Последствия: возвращает узел_ptr к первому элементу, который эквивалентен "ключу" согласно "комп" или "заголовку", если этот элемент не существует.
Комплексность: Логарифмическая.
Броски: Если "комп" бросает.
template<typename KeyType, typename KeyNodePtrCompare> static std, node_ptr equal_range(const & const KeyType &KeyNodePtrCompare;
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs.
Последствия: Возвращает пару node_ptr, делимитирующую диапазон, содержащий все элементы, которые эквивалентны «ключу» согласно «компу» или пустому диапазону, который указывает положение, где эти элементы были бы, если бы не было эквивалентных элементов.
Комплексность: Логарифмическая.
Броски: Если «комп» бросает.
template<typename KeyType, typename KeyNodePtrCompare> staticstd, node_ptr bounded_range constconst_node_ptr const_node_ptr, const & lower_key, top_key, KeyNodePtrCompare comp, bool left_closed, bool left_closed,
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare может сравнить KeyType с node_ptrs дерева. Нижний ключ не должен быть больше верхнего ключа в соответствии с компом. Если «нижний_ключ» == «верхний_ключ», (слева_закрыто)
: Возвращает пару со следующими критериями:
first = low_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) if right_closed, lower_bound(upper_key) if right_closed, lower_76>: Logarithmic.
: Если бросает "comp".
Примечание: Эта функция может быть более эффективной, чем вызов upper_bound и lower_bound для low_key и upper_key.
: Экспериментальная функция, интерфейс может измениться.
template<typename KeyType, typename KeyNodePtrCompare> static::size_tconstconst_node_ptr & constKeyType &KeyNodePtrCompare;
: "header" должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs.
Последствия: Возвращает число элементов с ключом, эквивалентным "ключу" по "комп".
Комплексность: Логарифмическая.
Броски: Если "комп" бросает.
templatetypenameNodePtrCompare> static node_ptrinsert_equal_upper_bound(const &constnode_ptr & new_nodecompare;
: "h" должен быть узлом заголовка дерева. NodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает два узла_ptrs.
Последствия: Вставляет новый_узел в дерево перед верхней границей согласно "комп".
Сложность: Средняя сложность для вставочного элемента является наиболее логарифмической.
Броски: Если "комп" бросает.
templatetypenameNodePtrCompare> static node_ptrinsert_equal_lower_bound(const &constnode_ptr & new_nodecompare;
: "h" должен быть узлом заголовка дерева. NodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает два узла_ptrs.
Последствия: Вставляет новый_узел в дерево перед нижней границей в соответствии с "комп".
Комплексность: Средняя сложность для элемента вставки является наиболее логарифмической.
Броски: Если "комп" бросает.
templatetypenameNodePtrCompare>static node_ptrinsert_equalconst&constnode_ptr &node_ptr & new_node,new_nodecompare;
: «заголовок» должен быть узлом заголовка дерева. NodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает два узла_ptrs.
Последствия: Вставляет новый_узел в дерево, используя "наконечник" в качестве подсказки к тому, где он будет вставлен. Если «подсказка» является верхним_связанным, вставка занимает постоянное время (два сравнения в худшем случае).
Сложность: Логарифмическая в целом, но это амортизированное постоянное время, если новый_узел вставлен непосредственно перед «подсказкой».
Броски: Если «комп» бросает.
static node_ptrinsert_beforenode_ptr , const node_ptr , pos, const node_ptr &new_node;;
: "header" должен быть узлом заголовка дерева. "pos" должен быть действительным итератором или узлом заголовка (конца). "pos" должен быть итератором, указывающим на преемника "new_node" после вставки в соответствии с порядком уже вставленных узлов. Эта функция не проверяет «pos» и это предварительное условие должно быть гарантировано абонентом.
: Вставляет новый_узел в дерево до «pos».
: Сложность: Постоянное время.
Броски: Ничего.
Примечание: Если «pos» не является преемником вновь вставленных инвариантов дерева «new_node» может быть нарушено.
static voidpush_back(const&constconstnode_ptr& new_node;;
: "header" должен быть узлом заголовка дерева. "new_node" должен быть, согласно используемому порядку, не менее, чем наибольший вставленный ключ.
: Вводит новый_node в дерево до "pos".
: Сложность: Постоянное время.
Броски: Ничего.
Примечание: Если "new_node" меньше, чем наибольшие вставленные инварианты ключевого дерева сломаны. Эта функция немного быстрее, чем использование «insert_before».
static voidpush_frontnode_ptr , constconst const node_ptr & new_node;;
: "header" должен быть узлом заголовка дерева. "new_node" должен быть, согласно используемому порядку, не больше, чем самый низкий вставленный ключ.
: Вставляет новый_node в дерево перед "pos".
: Сложность: Постоянное время.
Броски: Ничего.
Примечание: Если "new_node" больше, чем самые низкие вставленные инварианты ключевого дерева сломаны. Эта функция немного быстрее, чем использование «insert_before».
template<typename KeyType, typename KeyNodePtrCompare> staticstd, bool > inert_unique_checkconst const_node_ptr & KeyType&KeyNodePtrComparecommit_data &&
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. Узел PtrCompare сравнивает KeyType with a node_ptr.
Последствия: Проверяет, есть ли эквивалентный узел для "ключа" в дереве по "комп" и получает необходимую информацию для реализации вставки узла постоянного времени, если нет эквивалентного узла.
Возвращает : Если есть эквивалентное значение возвращает пару, содержащую узел_ptr, к уже существующему узлу и ложному. Если эквивалентный ключ не может быть вставлен в булевой ключ возвращаемой пары и заполняет «commit_data», который предназначен для использования с функцией «insert_commit» для достижения функции вставки в постоянное время.
Сложность: Средняя сложность является наиболее логарифмической.
: Броски: Если «комп» бросает.
Примечания: Эта функция используется для повышения производительности при построении узла дорого и пользователь не хочет иметь два эквивалентных узла в дереве: если есть эквивалентное значение, построенный объект должен быть отброшен. Много раз, часть узла, которая используется, чтобы навязать заказ, намного дешевле, чем узел, и эта функция предлагает возможность использовать эту часть, чтобы проверить, будет ли вставка успешной.
Если проверка успешна, пользователь может построить узел и использовать «insert_commit» для вставки узла в постоянное время. Это придает полную логарифмическую сложность вставке: check(O(log(N)) + commit(O(1)).
"commit_data" остается действительным для последующего "insert_unique_commit" только в том случае, если из набора больше не вставлено или стерто никаких объектов.
template<typename KeyType, typename KeyNodePtrCompare> staticstd, bool > constconst_node_ptr & const & node_ptr &KeyNodePtrCompare, inert_commit_data&;
: «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает KeyType with a node_ptr. "hint" is node from the "header"'s tree.
Effects: Проверяет, есть ли эквивалентный узел "ключу" в дереве согласно "comp", используя "hint" в качестве подсказки к тому, где он должен быть вставлен, и получает необходимую информацию для реализации вставки узла постоянного времени, если нет эквивалентного узла. Если «подсказка» является верхней_связанной, функция имеет постоянную временную сложность (два сравнения в худшем случае).
Возвращает: Если есть эквивалентное значение возвращает пару, содержащую узел_ptr, к уже существующему узлу и ложную. Если эквивалентный ключ не может быть вставлен в булевой ключ возвращаемой пары и заполняет «commit_data», который предназначен для использования с функцией «insert_commit» для достижения функции вставки в постоянное время.
Сложность : Средняя сложность в лучшем случае логарифмическая, но это амортизированное постоянное время, если новый_узел должен быть вставлен непосредственно перед «подсказкой».
: Если «комп» бросает.
Примечания : Эта функция используется для повышения производительности при построении узла дорого и пользователь не хочет иметь два эквивалентных узла в дереве: если есть эквивалентное значение, построенный объект должен быть отброшен. Много раз, часть узла, которая используется, чтобы навязать заказ, намного дешевле построить, чем узел, и эта функция предлагает возможность использовать эту часть, чтобы проверить, будет ли вставка успешной.
Если проверка успешна, пользователь может построить узел и использовать «insert_commit» для вставки узла в постоянное время. Это придает полную логарифмическую сложность вставке: check(O(log(N)) + commit(O(1)).
"commit_data" остается действительным для последующего "insert_unique_commit" только в том случае, если из набора не вставлено или стерто больше объектов.
static voidinsert_unique_commit(node_ptr , const node_ptr & new_value, const insert_commit_data & commit_data;;
: «заголовок» должен быть узлом заголовка дерева. "commit_data" должно быть получено из предыдущего вызова "insert_unique_check". Никакие объекты не должны были быть вставлены или удалены из набора между «insert_unique_check», который заполнил «commit_data» и вызовом «insert_commit».
: Вставьте новый_node в набор, используя информацию, полученную из «commit_check», которую заполнил предыдущий «insert_check».
: Постоянное время.
Броски: Ничто.
Примечания: Эта функция имеет смысл только в том случае, если ранее была выполнена «insert_unique_check» для заполнения «commit_data». Не следует вставлять или стирать значение между вызовами «insert_check» и «insert_commit».
static boolis_headerconst_node_ptr &;
: Требуется ::
: Сложность: Constant.
Броски: Ничего.