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

Class template treap_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 treap_algorithms

boost::intrusive::treap_algorithms

Synopsis

// In header: <boost/intrusive/treap_algorithms.hpp>
template<typename NodeTraits> 
class treap_algorithms {
public:
  // types
  typedef NodeTraits                 node_traits;   
  typedef NodeTraits::node           node;          
  typedef NodeTraits::node_ptr       node_ptr;      
  typedef NodeTraits::const_node_ptr const_node_ptr;
  // member classes/structs/unions
  struct 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 &);
  template<typename NodePtrPriorityCompare> 
    static void unlink(const node_ptr &, NodePtrPriorityCompare);
  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 &);
  template<typename NodePtrPriorityCompare> 
    static node_ptr 
    erase(const node_ptr &, const node_ptr &, NodePtrPriorityCompare);
  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, typename NodePtrPriorityCompare> 
    static node_ptr 
    insert_equal_upper_bound(const node_ptr &, const node_ptr &, 
                             NodePtrCompare, NodePtrPriorityCompare);
  template<typename NodePtrCompare, typename NodePtrPriorityCompare> 
    static node_ptr 
    insert_equal_lower_bound(const node_ptr &, const node_ptr &, 
                             NodePtrCompare, NodePtrPriorityCompare);
  template<typename NodePtrCompare, typename NodePtrPriorityCompare> 
    static node_ptr 
    insert_equal(const node_ptr &, const node_ptr &, const node_ptr &, 
                 NodePtrCompare, NodePtrPriorityCompare);
  template<typename NodePtrPriorityCompare> 
    static node_ptr 
    insert_before(const node_ptr &, const node_ptr &, const node_ptr &, 
                  NodePtrPriorityCompare);
  template<typename NodePtrPriorityCompare> 
    static void push_back(const node_ptr &, const node_ptr &, 
                          NodePtrPriorityCompare);
  template<typename NodePtrPriorityCompare> 
    static void push_front(const node_ptr &, const node_ptr &, 
                           NodePtrPriorityCompare);
  template<typename KeyType, typename KeyNodePtrCompare, 
           typename KeyNodePtrPrioCompare> 
    static std::pair< node_ptr, bool > 
    insert_unique_check(const const_node_ptr &, const KeyType &, 
                        KeyNodePtrCompare, KeyNodePtrPrioCompare, 
                        insert_commit_data &);
  template<typename KeyType, typename KeyNodePtrCompare, 
           typename KeyNodePtrPrioCompare> 
    static std::pair< node_ptr, bool > 
    insert_unique_check(const const_node_ptr &, const node_ptr &, 
                        const KeyType &, KeyNodePtrCompare, 
                        KeyNodePtrPrioCompare, insert_commit_data &);
  static void insert_unique_commit(const node_ptr &, const node_ptr &, 
                                   const insert_commit_data &);
  template<typename NodePtrCompare, typename KeyNodePtrPrioCompare> 
    static bool transfer_unique(const node_ptr &, NodePtrCompare, 
                                KeyNodePtrPrioCompare, const node_ptr &, 
                                const node_ptr &);
  template<typename NodePtrCompare, typename KeyNodePtrPrioCompare> 
    static void transfer_equal(const node_ptr &, NodePtrCompare, 
                               KeyNodePtrPrioCompare, const node_ptr &, 
                               const node_ptr &);
  static bool is_header(const const_node_ptr &);
};

Description

treap_algorithms предоставляет базовые алгоритмы для манипулирования узлами, формирующими трэп.

(1) узел заголовка поддерживается со ссылками не только на корень, но и на самый левый узел дерева, чтобы включить начало постоянного времени (), и на самый правый узел дерева, чтобы включить линейную производительность времени при использовании с общими алгоритмами набора (set_union и т. д.);

(2) когда удаляемый узел имеет двух детей, его последующий узел повторно ссылается на свое место, а не копируется, так что единственными указателями, недействительными, являются те, которые ссылаются на удаленный узел.

treap_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);

treap_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. templatetypenameNodePtrPriorityCompare> void voidunlinkconst node_ptr,  pcomp;

    : Эффекты

    : Сложность

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

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

  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. templatetypenamestatic node_ptreraseconst,const node_ptr &  z,  pcomp;

    : Эффекты : Стирает узел "z" с дерева с заголовком "header".

    : Amortized constant time.

    Throws: Ничего.

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

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

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

  19. templatetypename>voidclear_and_disposenode_ptr , disposer,;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  26. templatetypename,typenameNodePtrPriorityCompare> static staticinert_equal_upper_bound(const &node_ptr ,NodePtrComparecomp,NodePtrPriorityCompare;

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

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

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

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

  27. templatetypename,typenameNodePtrPriorityCompare> static static inert_equal_lower_bound(const &node_ptr ,NodePtrComparecomp,NodePtrPriorityCompare;

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

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

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

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

  28. templatetypename,typenameNodePtrPriorityCompare> staticinert_equalconst &constnode_ptr & const и  new_node,NodePtrComparecomp,

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

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

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

    Броски: Если "comp" бросок или "pcomp" бросок.

  29. templatetypenamestatic node_ptrinsert_beforeconst& constconstnode_ptr , const pos,node_ptr , new_node pcomp,

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

    : Вставляет новый_узел в дерево перед "pos" и вращает дерево в соответствии с "pcomp".

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

    Броски: Если "pcomp" бросает, сильная гарантия.

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

  30. templatetypenameNodePtrPriorityCompare> static voidpush_backconst node_ptr ,node_ptr & new_node, new_node pcomp;

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

    Эффекты: Вставьте x в дерево в последнем положении и поверните дерево в соответствии с "pcomp".

    : Постоянность.

    Броски: Если "pcomp" бросает, сильная гарантия.

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

  31. templatetypenameNodePtrPriorityCompare> static voidpush_front(const & constnode_ptr & new_node, new_node pcomp;

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

    : Вставьте x в дерево в первом положении и поверните дерево в соответствии с "pcomp".

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

    Броски: Если "pcomp" бросает, сильная гарантия.

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

  32. template<typename KeyType, typename KeyNodePtrCompare, typename KeyNodePtrPrioCompare> static, bool > const const_node_ptr & const & KeyType &KeyNodePtrComparecomp, insert_commit_data &

    : «заголовок» должен быть узлом заголовка дерева. KeyNodePtrCompare - это функциональный объект, который вызывает строгое слабое упорядочение, совместимое со строгим слабым упорядочением, используемым для создания дерева. Узел PtrCompare сравнивает KeyType with a node_ptr.

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

    Возвращает : Если есть эквивалентное значение возвращает пару, содержащую узел_ptr, к уже существующему узлу и ложному. Если эквивалентный ключ не может быть вставлен в булевой ключ возвращаемой пары и заполняет «commit_data», который предназначен для использования с функцией «insert_commit» для достижения функции вставки в постоянное время.

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

    : Если «comp» бросает.

    Примечания : Эта функция используется для повышения производительности при строительстве узла дорого и пользователь не хочет иметь два эквивалентных узла в дереве: если есть эквивалентное значение, построенный объект должен быть отброшен. Много раз, часть узла, которая используется, чтобы навязать заказ, намного дешевле построить, чем узел, и эта функция предлагает возможность использовать эту часть, чтобы проверить, будет ли вставка успешной.

    Если проверка успешна, пользователь может построить узел и использовать «insert_commit» для вставки узла в постоянное время. Это придает полную логарифмическую сложность вставке: check(O(log(N)) + commit(O(1)).

    "commit_data" остается действительным для последующего "insert_unique_commit" только в том случае, если из набора не вставлено или стерто больше объектов.

  33. template<typename KeyType, typename KeyNodePtrCompare, typename KeyNodePtrPrioCompare> , bool > (const_node_ptr & const & node_ptr & KeyType &KeyNodePtrComparecomp, insert_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" только в том случае, если из набора не вставлено больше объектов.

  34. static voidinert_unique_commitnode_ptr , const node_ptr & new_node, constinsert_commit_data & commit_data;2>;

    : "header" должен быть узлом заголовка дерева. "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».

  35. templatetypename,typename KeyNodePtrPrioCompare, KeyNodePtrPrrioComparestatic booltransfer_uniqueconstconstconst,KeyNodePtrPrioComparecomp,node_ptrnode_ptr&node_ptr

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

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

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

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

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

  36. templatetypename,typename KeyNodePtrPrioCompare, KeyNodePtrPrioCompare static voidtransfer_equalconstconstconst,KeyNodePtrPrioComparecomp,node_ptrnode_ptr&node_ptr

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

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

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

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

  37. static boolis_headerconst_node_ptr &;

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

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

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


Статья Class template treap_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-19 22:32:54/0.013154029846191/0