Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template avltree_algorithms

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class template avltree_algorithms

boost::intrusive::avltree_algorithms

Synopsis

// In header: <boost/intrusive/avltree_algorithms.hpp>
template<typename NodeTraits> 
class avltree_algorithms {
public:
  // types
  typedef NodeTraits::node                node;              
  typedef NodeTraits                      node_traits;       
  typedef NodeTraits::node_ptr            node_ptr;          
  typedef NodeTraits::const_node_ptr      const_node_ptr;    
  typedef NodeTraits::balance             balance;           
  typedef bstree_algo::insert_commit_data insert_commit_data;
  // public static functions
  static node_ptr get_header(const const_node_ptr &);
  static node_ptr begin_node(const const_node_ptr &);
  static node_ptr end_node(const const_node_ptr &);
  static void swap_tree(const node_ptr &, const node_ptr &);
  static void swap_nodes(const node_ptr &, const node_ptr &);
  static void swap_nodes(const node_ptr &, const node_ptr &, const node_ptr &, 
                         const node_ptr &);
  static void replace_node(const node_ptr &, const node_ptr &);
  static void replace_node(const node_ptr &, const node_ptr &, 
                           const node_ptr &);
  static void unlink(const node_ptr &);
  static node_ptr unlink_leftmost_without_rebalance(const node_ptr &);
  static bool unique(const const_node_ptr &);
  static std::size_t size(const const_node_ptr &);
  static node_ptr next_node(const node_ptr &);
  static node_ptr prev_node(const node_ptr &);
  static void init(const node_ptr &);
  static void init_header(const node_ptr &);
  static node_ptr erase(const node_ptr &, const node_ptr &);
  template<typename NodePtrCompare> 
    static bool transfer_unique(const node_ptr &, NodePtrCompare, 
                                const node_ptr &, const node_ptr &);
  template<typename NodePtrCompare> 
    static void transfer_equal(const node_ptr &, NodePtrCompare, 
                               const node_ptr &, const node_ptr &);
  template<typename Cloner, typename Disposer> 
    static void clone(const const_node_ptr &, const node_ptr &, Cloner, 
                      Disposer);
  template<typename Disposer> 
    static void clear_and_dispose(const node_ptr &, Disposer);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static node_ptr 
    lower_bound(const const_node_ptr &, const KeyType &, KeyNodePtrCompare);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static node_ptr 
    upper_bound(const const_node_ptr &, const KeyType &, KeyNodePtrCompare);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static node_ptr 
    find(const const_node_ptr &, const KeyType &, KeyNodePtrCompare);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static std::pair< node_ptr, node_ptr > 
    equal_range(const const_node_ptr &, const KeyType &, KeyNodePtrCompare);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static std::pair< node_ptr, node_ptr > 
    bounded_range(const const_node_ptr &, const KeyType &, const KeyType &, 
                  KeyNodePtrCompare, bool, bool);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static std::size_t 
    count(const const_node_ptr &, const KeyType &, KeyNodePtrCompare);
  template<typename NodePtrCompare> 
    static node_ptr 
    insert_equal_upper_bound(const node_ptr &, const node_ptr &, 
                             NodePtrCompare);
  template<typename NodePtrCompare> 
    static node_ptr 
    insert_equal_lower_bound(const node_ptr &, const node_ptr &, 
                             NodePtrCompare);
  template<typename NodePtrCompare> 
    static node_ptr 
    insert_equal(const node_ptr &, const node_ptr &, const node_ptr &, 
                 NodePtrCompare);
  static node_ptr 
  insert_before(const node_ptr &, const node_ptr &, const node_ptr &);
  static void push_back(const node_ptr &, const node_ptr &);
  static void push_front(const node_ptr &, const node_ptr &);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static std::pair< node_ptr, bool > 
    insert_unique_check(const const_node_ptr &, const KeyType &, 
                        KeyNodePtrCompare, insert_commit_data &);
  template<typename KeyType, typename KeyNodePtrCompare> 
    static std::pair< node_ptr, bool > 
    insert_unique_check(const const_node_ptr &, const node_ptr &, 
                        const KeyType &, KeyNodePtrCompare, 
                        insert_commit_data &);
  static void insert_unique_commit(const node_ptr &, const node_ptr &, 
                                   const insert_commit_data &);
  static bool is_header(const const_node_ptr &);
};

Description

avltree_algorithms сконфигурирован с классом NodeTraits, который инкапсулирует информацию о узле, которым нужно манипулировать. NodeTraits должен поддерживать следующий интерфейс:

Типедефы:

node: тип узла, который образует двоичное дерево поиска

node_ptr: указатель на узел

const_node_ptr Указатель на узел const

Баланс: Тип коэффициента баланса

Статические функции

статический узел_ptr get_parent(const_node_ptr n)

static void set_parent(node_ptr n, node_ptr parent);

статический узел_ptr get_left(const_node_ptr n)

static void set_left(node_ptr n, node_ptr left);

статический узел_ptr get_right (const_node_ptr n)

static void set_right (node_ptr n, node_ptr right);

статический баланс get_balance(const_node_ptr n);

static void set_balance(node_ptr n, balance b);

статический баланс отрицательный();

нулевой статический баланс();

положительный статический баланс();

avltree_algorithms public types

  1. typedef bstree_algo::insert_commit_data insert_commit_data;

    Этот тип информации будет заполнен вставкой_unique_check

avltree_algorithms public static functions

  1. static node_ptrget_headerconst_node_ptr &;

    :

    :Возвращает заголовок дерева.

    :Логарифмический.

    Броски:Ничего.

  2. static node_ptrbegin_nodeconst_node_ptr &;

    :

    : Возвращает первый узел дерева, заголовок если дерево пустое.

    : Постоянное время.

    Броски: Ничего.

  3. static node_ptrend_nodeconst_node_ptr &;

    :

    : Возвращает заголовок дерева.

    : Постоянное время.

    Броски: Ничего.

  4. static voidswap_treenode_ptr , constnode_ptr &;;

    : header1 и header2 должны быть узлами заголовка двух деревьев.

    Последствия: Свопы двух деревьев. После этого заголовок функции1 будет содержать ссылки на второе дерево, а заголовок2 будет иметь ссылки на первое дерево.

    Сложность: Константа.

    Броски: Ничего.

  5. static voidswap_nodesnode_ptr , const node_ptr & node2;;

    : узел и узел2 не могут быть заголовочными узлами двух деревьев.

    Последствия: Замена двух узлов. После этого функциональный узел 1 будет вставлен в положение узел 2 перед функцией. Узел 2 будет вставлен в положение, которое узел 1 имел перед функцией.

    : Логарифмический.

    Броски: Ничего.

    Примечание: Эта функция разрушит инварианты упорядочивания контейнеров, если узел 1 и узел 2 не эквивалентны согласно правилам упорядочивания.

    Экспериментальная функция

  6. static voidnode_ptr, node_ptr , node_ptr ,   node2,   node_ptr &;;
    : узел 1 и узел 2 не могут быть узлами заголовка двух деревьев с заголовком header1 и header2.

    :2>: Swaps два узла. После этого функциональный узел 1 будет вставлен в положение узел 2 перед функцией. Узел 2 будет вставлен в положение, которое узел 1 имел перед функцией.

    : Константа.

    Броски: Ничего.

    Примечание: Эта функция разрушит инварианты упорядочивания контейнеров, если узел 1 и узел 2 не эквивалентны согласно правилам упорядочивания.

    Экспериментальная функция

  7. 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_заменен согласно правилам упорядочивания. Эта функция быстрее, чем стирание и вставка узла, так как не требуется перебалансировки и сравнения. Экспериментальная функция

  8. 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_, замещенному согласно правилам упорядочивания. Эта функция быстрее, чем стирание и вставка узла, поскольку не требуется перебалансировки или сравнения. Экспериментальная функция

  9. static voidunlinknode_ptr &;
    : Узел - это узел дерева, но не заголовок.

    Средняя сложность - постоянное время.

    Броски: Ничего.

  10. static node_ptrunlink_leftmost_without_rebalancenode_ptr;: Заголовок : Эффекты : Средняя сложность : Средние сложности: Броски: Ничего.

    Примечания : Эту функцию можно использовать только для вызовов unlink_leftmost_without_rebalance. Эта функция обычно используется для достижения постепенного контролируемого разрушения дерева.

  11. static boolconstconst_node_ptr ;;
    Требуется : «узел» инициализируется init(...) или init_node.

    : Сложность: Постоянное время.

    Броски: Ничего.

  12. static std::size_tconstconst_node_ptr &;

    : Узел : Эффекты : Возвращает количество узлов поддеревья.

    : Линейное время.

    Броски: Ничего.

  13. static node_ptrnext_node(const node_ptr & node;

    : «узел» является узлом дерева, за исключением заголовок.

    Последствия: Возвращает следующий узел дерева.

    Комплексность: Среднее постоянное время.

    Броски: Ничего.

  14. static node_ptrprev_nodenode_ptr &;

    : : Возвращает предыдущий узел дерева.

    : Средняя постоянная времени.

    Броски: Ничего.

  15. static voidinitnode_ptr;: «Узел» не должен быть частью какого-либо дерева.

    : После уникальной функции (узел) == истинно.

    : Константа.

    : Ничего.

    Узлы: Если узел вставлен в дерево, эта функция повреждает дерево.

  16. static voidinit_headernode_ptr &header;

    : Узел не должен быть частью какого-либо дерева.

    Последствия: Инициализирует заголовок для представления пустого дерева. Уникальный (заголовок) == истинно.

    : Константа.

    Броски: Ничего.

    Узлы: Если узел вставлен в дерево, эта функция портит дерево.

  17. static node_ptrnode_ptr , const node_ptr &;;

    : Заголовок должен быть заголовком дерева, z узла этого дерева и z !=заголовок.

    Сложность:Амортизированное постоянное время.

    Броски: Ничего.

  18. templatetypename> booltransfer_uniqueconstnode_ptr , const comp, constnode_ptr , const& &;

    : заголовки деревьев tree1 и tree2 соответственно, z незаголовочный узел дерева1. NodePtrCompare - функция сравнения дерева1..

    : Переносит узел "z" с дерева1 на дерево2, если дерево1 не содержит узел, эквивалентный z.

    : Верно, если узел был трассферирован, ложно иначе.

    : Логарифмический.

    Броски: Если сравнение бросает.

  19. templatetypename>voidtransfer_equalnode_ptr,constcomp,constnode_ptr &node_ptr&;

    : заголовки деревьев tree1 и tree2 соответственно, z незаголовочный узел tree1. NodePtrCompare — функция сравнения дерева1..

    Эффекты: Перенос узла «z» с дерева1 на дерево2.

    Сложность: Логарифмическая.

    Броски: Если сравнение бросает.

  20. 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 &).

    Комплексность: Линейное число элемента дерева-источника плюс число элементов дерева-мишени при вызове этой функции.

    Броски: Если клонер-функтор бросит. Если это происходит, узлы-мишени удаляются.

  21. templatetypename>voidclear_and_disposenode_ptr , disposer,;

    : «disposer» должен быть объектной функцией, принимающей параметр node_ptr: Эффекты : Пустоты целевого дерева, вызывающие void disposer::оператор()(const node_ptr &) для каждого узла дерева, кроме заголовка.

    : Линейность к числу элемента дерева-источника плюс дерево-источник. Количество элементов дерева-мишени при вызове этой функции.

    Броски: Если клонер-функтор бросит. Если это происходит, узлы-мишени удаляются.

  22. template<typename KeyType, typename KeyNodePtrCompare> static node_ptrlower_bound(constconst_node_ptr , constKeyType &KeyNodePtrCompare);
    : «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs.

    Последствия: Возвращает узел_ptr к первому элементу, который не меньше «ключа» по «комп» или «заголовку», если этот элемент не существует.

    Комплексность: Логарифмическая.

    Броски: Если «комп» бросает.

  23. template<typename KeyType, typename KeyNodePtrCompare> static node_ptrupper_bound(constconst_node_ptr , constKeyType &KeyNodePtrCompare);
    : «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs.

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

    Комплексность: Логарифмическая.

    Броски: Если «комп» бросает.

  24. template<typename KeyType, typename KeyNodePtrCompare> static node_ptrfind(const_node_ptr & constKeyType & KeyNodePtrCompare);
    : «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs.

    Последствия: возвращает узел_ptr к первому элементу, который эквивалентен "ключу" согласно "комп" или "заголовку", если этот элемент не существует.

    Комплексность: Логарифмическая.

    Броски: Если "комп" бросает.

  25. 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, делимитирующую диапазон, содержащий все элементы, которые эквивалентны «ключу» согласно «компу» или пустому диапазону, который указывает положение, где эти элементы были бы, если бы не было эквивалентных элементов.

    Комплексность: Логарифмическая.

    Броски: Если «комп» бросает.

  26. 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.

    : Экспериментальная функция, интерфейс может измениться.

  27. template<typename KeyType, typename KeyNodePtrCompare> static::size_tconstconst_node_ptr & constKeyType &KeyNodePtrCompare;

    : "header" должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. KeyNodePtrCompare можно сравнить KeyType with tree's node_ptrs.

    Последствия: Возвращает число элементов с ключом, эквивалентным "ключу" по "комп".

    Комплексность: Логарифмическая.

    Броски: Если "комп" бросает.

  28. templatetypenameNodePtrCompare> static node_ptrinsert_equal_upper_bound(const &constnode_ptr & new_nodecompare;

    : "h" должен быть узлом заголовка дерева. NodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает два узла_ptrs.

    Последствия: Вставляет новый_узел в дерево перед верхней границей согласно "комп".

    Сложность: Средняя сложность для вставочного элемента является наиболее логарифмической.

    Броски: Если "комп" бросает.

  29. templatetypenameNodePtrCompare> static node_ptrinsert_equal_lower_bound(const &constnode_ptr & new_nodecompare;

    : "h" должен быть узлом заголовка дерева. NodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает два узла_ptrs.

    Последствия: Вставляет новый_узел в дерево перед нижней границей в соответствии с "комп".

    Комплексность: Средняя сложность для элемента вставки является наиболее логарифмической.

    Броски: Если "комп" бросает.

  30. templatetypenameNodePtrCompare>static node_ptrinsert_equalconst&constnode_ptr &node_ptr & new_node,new_nodecompare;

    : «заголовок» должен быть узлом заголовка дерева. NodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. NodePtrCompare сравнивает два узла_ptrs.

    Последствия: Вставляет новый_узел в дерево, используя "наконечник" в качестве подсказки к тому, где он будет вставлен. Если «подсказка» является верхним_связанным, вставка занимает постоянное время (два сравнения в худшем случае).

    Сложность: Логарифмическая в целом, но это амортизированное постоянное время, если новый_узел вставлен непосредственно перед «подсказкой».

    Броски: Если «комп» бросает.

  31. static node_ptrinsert_beforenode_ptr , const node_ptr ,  pos,  const node_ptr &new_node;;

    : "header" должен быть узлом заголовка дерева. "pos" должен быть действительным итератором или узлом заголовка (конца). "pos" должен быть итератором, указывающим на преемника "new_node" после вставки в соответствии с порядком уже вставленных узлов. Эта функция не проверяет «pos» и это предварительное условие должно быть гарантировано абонентом.

    : Вставляет новый_узел в дерево до «pos».

    : Сложность: Постоянное время.

    Броски: Ничего.

    Примечание: Если «pos» не является преемником вновь вставленных инвариантов дерева «new_node» может быть нарушено.

  32. static voidpush_back(const&constconstnode_ptr& new_node;;

    : "header" должен быть узлом заголовка дерева. "new_node" должен быть, согласно используемому порядку, не менее, чем наибольший вставленный ключ.

    : Вводит новый_node в дерево до "pos".

    : Сложность: Постоянное время.

    Броски: Ничего.

    Примечание: Если "new_node" меньше, чем наибольшие вставленные инварианты ключевого дерева сломаны. Эта функция немного быстрее, чем использование «insert_before».

  33. static voidpush_frontnode_ptr , constconst const node_ptr & new_node;;

    : "header" должен быть узлом заголовка дерева. "new_node" должен быть, согласно используемому порядку, не больше, чем самый низкий вставленный ключ.

    : Вставляет новый_node в дерево перед "pos".

    : Сложность: Постоянное время.

    Броски: Ничего.

    Примечание: Если "new_node" больше, чем самые низкие вставленные инварианты ключевого дерева сломаны. Эта функция немного быстрее, чем использование «insert_before».

  34. 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" только в том случае, если из набора больше не вставлено или стерто никаких объектов.

  35. 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" только в том случае, если из набора не вставлено или стерто больше объектов.

  36. 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».

  37. static boolis_headerconst_node_ptr &;

    : Требуется ::

    : Сложность: Constant.

    Броски: Ничего.


Статья Class template avltree_algorithms раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:41:30/0.012107133865356/0