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

Class template splay_set

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 splay_set

boost::intrusive::splay_set

Synopsis

// In header: <boost/intrusive/splay_set.hpp>
template<typename T, class... Options> 
class splay_set {
public:
  // types
  typedef implementation_defined::value_type             value_type;            
  typedef implementation_defined::key_type               key_type;              
  typedef implementation_defined::key_of_value           key_of_value;          
  typedef implementation_defined::value_traits           value_traits;          
  typedef implementation_defined::pointer                pointer;               
  typedef implementation_defined::const_pointer          const_pointer;         
  typedef implementation_defined::reference              reference;             
  typedef implementation_defined::const_reference        const_reference;       
  typedef implementation_defined::difference_type        difference_type;       
  typedef implementation_defined::size_type              size_type;             
  typedef implementation_defined::value_compare          value_compare;         
  typedef implementation_defined::key_compare            key_compare;           
  typedef implementation_defined::iterator               iterator;              
  typedef implementation_defined::const_iterator         const_iterator;        
  typedef implementation_defined::reverse_iterator       reverse_iterator;      
  typedef implementation_defined::const_reverse_iterator const_reverse_iterator;
  typedef implementation_defined::insert_commit_data     insert_commit_data;    
  typedef implementation_defined::node_traits            node_traits;           
  typedef implementation_defined::node                   node;                  
  typedef implementation_defined::node_ptr               node_ptr;              
  typedef implementation_defined::const_node_ptr         const_node_ptr;        
  typedef implementation_defined::node_algorithms        node_algorithms;       
  // construct/copy/destruct
  splay_set();
  explicit splay_set(const key_compare &, 
                     const value_traits & = value_traits());
  template<typename Iterator> 
    splay_set(Iterator, Iterator, const key_compare & = key_compare(), 
              const value_traits & = value_traits());
  splay_set(splay_set &&);
  splay_set & operator=(splay_set &&);
  ~splay_set();
  // public member functions
  iterator begin();
  const_iterator begin() const;
  const_iterator cbegin() const;
  iterator end();
  const_iterator end() const;
  const_iterator cend() const;
  reverse_iterator rbegin();
  const_reverse_iterator rbegin() const;
  const_reverse_iterator crbegin() const;
  reverse_iterator rend();
  const_reverse_iterator rend() const;
  const_reverse_iterator crend() const;
  iterator root();
  const_iterator root() const;
  const_iterator croot() const;
  key_compare key_comp() const;
  value_compare value_comp() const;
  bool empty() const;
  size_type size() const;
  void swap(splay_set &);
  template<typename Cloner, typename Disposer> 
    void clone_from(const splay_set &, Cloner, Disposer);
  template<typename Cloner, typename Disposer> 
    void clone_from(splay_set &&, Cloner, Disposer);
  std::pair< iterator, bool > insert(reference);
  iterator insert(const_iterator, reference);
  std::pair< iterator, bool > 
  insert_check(const key_type &, insert_commit_data &);
  std::pair< iterator, bool > 
  insert_check(const_iterator, const key_type &, insert_commit_data &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    std::pair< iterator, bool > 
    insert_check(const KeyType &, KeyTypeKeyCompare, insert_commit_data &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    std::pair< iterator, bool > 
    insert_check(const_iterator, const KeyType &, KeyTypeKeyCompare, 
                 insert_commit_data &);
  template<typename Iterator> void insert(Iterator, Iterator);
  iterator insert_commit(reference, const insert_commit_data &);
  iterator insert_before(const_iterator, reference);
  void push_back(reference);
  void push_front(reference);
  iterator erase(const_iterator);
  iterator erase(const_iterator, const_iterator);
  size_type erase(const key_type &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    size_type erase(const KeyType &, KeyTypeKeyCompare);
  template<typename Disposer> 
    iterator erase_and_dispose(const_iterator, Disposer);
  template<typename Disposer> 
    iterator erase_and_dispose(const_iterator, const_iterator, Disposer);
  template<typename Disposer> 
    size_type erase_and_dispose(const key_type &, Disposer);
  template<typename KeyType, typename KeyTypeKeyCompare, typename Disposer> 
    size_type erase_and_dispose(const KeyType &, KeyTypeKeyCompare, Disposer);
  void clear();
  template<typename Disposer> void clear_and_dispose(Disposer);
  size_type count(const key_type &) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    size_type count(const KeyType &, KeyTypeKeyCompare) const;
  size_type count(const key_type &) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    size_type count(const KeyType &, KeyTypeKeyCompare) const;
  iterator lower_bound(const key_type &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    iterator lower_bound(const KeyType &, KeyTypeKeyCompare);
  const_iterator lower_bound(const key_type &) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    const_iterator lower_bound(const KeyType &, KeyTypeKeyCompare) const;
  iterator upper_bound(const key_type &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    iterator upper_bound(const KeyType &, KeyTypeKeyCompare);
  const_iterator upper_bound(const key_type &) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    const_iterator upper_bound(const KeyType &, KeyTypeKeyCompare) const;
  iterator find(const key_type &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    iterator find(const KeyType &, KeyTypeKeyCompare);
  const_iterator find(const key_type &) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    const_iterator find(const KeyType &, KeyTypeKeyCompare) const;
  std::pair< iterator, iterator > equal_range(const key_type &);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    std::pair< iterator, iterator > 
    equal_range(const KeyType &, KeyTypeKeyCompare);
  std::pair< const_iterator, const_iterator > 
  equal_range(const key_type &) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    std::pair< const_iterator, const_iterator > 
    equal_range(const KeyType &, KeyTypeKeyCompare) const;
  std::pair< iterator, iterator > 
  bounded_range(const key_type &, const key_type &, bool, bool);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    std::pair< iterator, iterator > 
    bounded_range(const KeyType &, const KeyType &, KeyTypeKeyCompare, bool, 
                  bool);
  std::pair< const_iterator, const_iterator > 
  bounded_range(const key_type &, const key_type &, bool, bool) const;
  template<typename KeyType, typename KeyTypeKeyCompare> 
    std::pair< const_iterator, const_iterator > 
    bounded_range(const KeyType &, const KeyType &, KeyTypeKeyCompare, bool, 
                  bool) const;
  iterator iterator_to(reference);
  const_iterator iterator_to(const_reference) const;
  pointer unlink_leftmost_without_rebalance();
  void replace_node(iterator, reference);
  void remove_node(reference);
  void splay_up(iterator);
  template<typename KeyType, typename KeyTypeKeyCompare> 
    iterator splay_down(const KeyType &, KeyTypeKeyCompare);
  iterator splay_down(const key_type &);
  void rebalance();
  iterator rebalance_subtree(iterator);
  template<class... Options2> void merge(splay_set< T, Options2...> &);
  template<class... Options2> void merge(splay_multiset< T, Options2...> &);
  // public static functions
  static splay_set & container_from_end_iterator(iterator);
  static const splay_set & container_from_end_iterator(const_iterator);
  static splay_set & container_from_iterator(iterator);
  static const splay_set & container_from_iterator(const_iterator);
  static iterator s_iterator_to(reference);
  static const_iterator s_iterator_to(const_reference);
  static void init_node(reference);
  // public data members
  static const bool constant_time_size;
};

Description

Шаблон классаsplay_setпредставляет собой интрузивный контейнер, имитирующий большую часть интерфейса std::set, как описано в стандарте C++.

Параметр шаблона<T>— тип, которым должен управлять контейнер. Пользователь может указать дополнительные опции и, если опции не предусмотрены, используются опции по умолчанию.

Контейнер поддерживает следующие варианты:<base_hook<>/member_hook<>/value_traits<>>,<constant_time_size<>>,<size_type<>>и<compare<>>.

splay_set public construct/copy/destruct

  1. <
    splay_set();
    >

    Эффекты: Постройте пустой контейнер.

    Сложность: Постоянная.

    Бросает: Если value_traits::node_traits::node constructor throws (это не происходит с заранее заданными Boost.Intrusive крючками) или копи-конструктор key_compare object throws. Базовая гарантия.

  2. <
    explicitsplay_set(constkey_compare&cmp,
                      constvalue_traits&v_traits=value_traits());
    >

    Эффекты: Постраивает пустой контейнер с заданными сравнениями и чертами.

    Сложность: Постоянная.

    Бросает: Если value_traits::node_traits::node constructor throws (это не происходит с заранее заданными Boost.Intrusive крючками) или копи-конструктор key_compare object throws. Базовая гарантия.

  3. <
    template<typenameIterator>
     splay_set(Iteratorb,Iteratore,constkey_compare&cmp=key_compare(),
               constvalue_traits&v_traits=value_traits());
    >

    Требуется: Отклоняющий итератор должен давать значение l типа value_type. cmp должна быть функцией сравнения, которая вызывает строгий слабый порядок.

    Эффекты: Конструирует пустой контейнер и вставляет элементы из [b, e]

    .Сложность: Линейный в N, если [b, e] уже отсортирован с использованием comp и иначе N * log N, где N — расстояние между первым и последним.

    Бросает: Если value_traits::node_traits::node constructor throws (это не происходит с предопределенным Boost). Навязчивые крючки или конструктор/оператор() копий бросков объекта key_compare. Базовая гарантия.

  4. <
    splay_set(splay_set&&x);
    >

    Эффекты: делать

  5. <
    splay_set&operator=(splay_set&&x);
    >

    Эффекты: делать

  6. <
    ~splay_set();
    >

    Эффекты: Отделяет от этого все элементы. Объекты в наборе не удаляются (т.е. не называются деструкторы), но узлы по шаблонному параметру<value_traits>перезапускаются и, таким образом, могут быть повторно использованы.

    Сложность: Линейные элементы, содержащиеся в *это.

    Бросает: Ничего.

splay_set public member functions

  1. <
    iteratorbegin();
    >

    Эффекты: Возвращает итератор, указывающий на начало контейнера.

    Сложность: Постоянная.

    Бросает: Ничего.

  2. <
    const_iteratorbegin()const;
    >

    Эффекты: Возвращает const_iterator, указывающий на начало контейнера.

    Сложность: Постоянная.

    Бросает: Ничего.

  3. <
    const_iteratorcbegin()const;
    >

    Эффекты: Возвращает const_iterator, указывающий на начало контейнера.

    Сложность: Постоянная.

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

  4. <
    iteratorend();
    >

    Эффекты: Возвращает итератор, указывающий на конец контейнера.

    Сложность: Постоянная.

    Бросает: Ничего.

  5. <
    const_iteratorend()const;
    >

    Эффекты: Возвращает const_iterator, указывающий на конец контейнера.

    Сложность: Постоянная.

    Бросает: Ничего.

  6. <
    const_iteratorcend()const;
    >

    Эффекты: Возвращает const_iterator, указывающий на конец контейнера.

    Сложность: Постоянная.

    Бросает: Ничего.

  7. <
    reverse_iteratorrbegin();
    >

    Эффекты: Возвращает обратный_iterator, указывающий на начало обратного контейнера.

    Сложность: Постоянная.

    Бросает: Ничего.

  8. <
    const_reverse_iteratorrbegin()const;
    >

    Эффекты: Возвращает const_reverse_iterator, указывающий на начало обратного контейнера.

    Сложность: Постоянная.

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

  9. <
    const_reverse_iteratorcrbegin()const;
    >

    Эффекты: Возвращает const_reverse_iterator, указывающий на начало обратного контейнера.

    Сложность: Постоянная.

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

  10. <
    reverse_iteratorrend();
    >

    Эффекты: Возвращает обратный_iterator, указывающий на конец обратного контейнера.

    Сложность: Постоянная.

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

  11. <
    const_reverse_iteratorrend()const;
    >

    Эффекты: Возвращает const_reverse_iterator, указывающий на конец обратного контейнера.

    Сложность: Постоянная.

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

  12. <
    const_reverse_iteratorcrend()const;
    >

    Эффекты: Возвращает const_reverse_iterator, указывающий на конец обратного контейнера.

    Сложность: Постоянная.

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

  13. <
    iteratorroot();
    >

    Эффекты: Возвращает итератор, указывающий на корневой узел контейнера или конец(), если он не присутствует.

    Сложность: Постоянная.

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

  14. <
    const_iteratorroot()const;
    >

    Эффекты: Возвращает const_iterator, указывающий на корневой узел контейнера или кенд(), если он отсутствует.

    Сложность: Постоянная.

    Бросает: Ничего.

  15. <
    const_iteratorcroot()const;
    >

    Эффекты: Возвращает const_iterator, указывающий на корневой узел контейнера или кенд(), если он отсутствует.

    Сложность: Постоянная.

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

  16. <
    key_comparekey_comp()const;
    >

    Эффекты: Возвращает объект key_compare, используемый контейнером.

    Сложность: Постоянная.

    Броски: Если бросит key_compare копи-конструктор.

  17. <
    value_comparevalue_comp()const;
    >

    Эффекты: Возвращает значение_сравнительный объект, используемый контейнером.

    Сложность: Постоянная.

    Бросает: Если value_compare копи-конструктор бросает.

  18. <
    boolempty()const;
    >

    Эффекты: Возвращается, если контейнер пуст.

    Сложность: Постоянная.

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

  19. <
    size_typesize()const;
    >

    Эффекты: Возвращает количество элементов, хранящихся в контейнере.

    Сложность: Линейный к элементам, содержащимся в *это, если опция постоянного размера отключена. Постоянное время иначе.

    Бросает: Ничего.

  20. <
    voidswap(splay_set&other);
    >

    Эффекты: Изменить содержимое двух контейнеров.

    Сложность: Постоянная.

    Броски: Если сравнительный своп функтора бросает вызов.

  21. <
    template<typenameCloner,typenameDisposer>
     voidclone_from(constsplay_set&src,Clonercloner,Disposerdisposer);
    >

    Требуется: Диспетчер::оператор()(поинт) не должен бросать. Клонер должен уступить узлам, эквивалентным исходным узлам.

    Эффекты: Стирает все элементы из *этого вызывающего Диспозитора::оператор()(указатель), клонирует все элементы из src, вызывающего Клонера::оператор()(const_reference) и вставляет их на *это. Копирует предикат из исходного контейнера.

    Если клонер бросает, все клонированные элементы несвязаны и расположены, вызывая Диспозитор::оператор()(указатель).

    Сложность: Линейный стертый плюс вставленные элементы.

    Бросок: Если клонер бросает или предикат копирования, задание бросает. Базовая гарантия. Дополнительные примечания: он также копирует альфа-фактор из исходного контейнера.

  22. <
    template<typenameCloner,typenameDisposer>
     voidclone_from(splay_set&&src,Clonercloner,Disposerdisposer);
    >

    Требуется: Диспетчер::оператор()(указатель) не должен бросать. Клонер должен уступить узлам, эквивалентным исходным узлам.

    Эффекты: Стирает все элементы из *этого вызывающего Диспозитора::оператор()(указатель), клонирует все элементы из src, вызывающего Клонера::оператор()(ссылка) и вставляет их на *это. Копирует предикат из исходного контейнера.

    Если клонер бросает, все клонированные элементы несвязаны и расположены, вызывая Диспозитор::оператор()(указатель).

    Сложность: Линейный стертый плюс вставленные элементы.

    Бросок: Если клонер бросает или предикат копирования, задание бросает. Основная гарантия.

    Примечание: Эта версия может модифицировать исходный контейнер, полезный для реализации семантики перемещения.

  23. <
    std::pair<iterator,bool>insert(referencevalue);
    >

    Требуется: Значение должно быть lvalue

    Эффекты: Вставляет значение в контейнер, если оно еще не присутствует.

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

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

    Примечание: Не влияет на достоверность итераторов и ссылок. Копировальными конструкторами не называются.

  24. <
    iteratorinsert(const_iteratorhint,referencevalue);
    >

    Требуется: Значение должно быть значением l, а «наконечник» должен быть действительным итератором

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

    Сложность: Логарифмический вообще, но это амортизированное постоянное время (два сравнения в худшем случае), если t вставлено непосредственно перед намёком.

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

    Примечание: Не влияет на достоверность итераторов и ссылок. Копировальными конструкторами не называются.

  25. <
    std::pair<iterator,bool>
    insert_check(constkey_type&key,insert_commit_data&commit_data);
    >

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

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

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

    Броски: Если выполняется функция заказа. Сильная гарантия.

  26. <
    std::pair<iterator,bool>
    insert_check(const_iteratorhint,constkey_type&key,
                insert_commit_data&commit_data);
    >

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

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

    Сложность: Логарифмическое вообще, но это амортизированное постоянное время, если t вставлено непосредственно перед намёком.

    Бросает: Если выполняется функция заказа. Сильная гарантия.

  27. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     std::pair<iterator,bool>
     insert_check(constKeyType&key,KeyTypeKeyComparecomp,
                  insert_commit_data&commit_data);
    >

    Требуется: Comp должен быть функцией сравнения, которая вызывает ту же строгую слабую упорядоченность, что и key_compare. Разница в том, что комп сравнивает произвольный ключ с содержащимися значениями.

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

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

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

    Броски: Если выполняется функция заказа. Сильная гарантия.

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

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

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

  28. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     std::pair<iterator,bool>
     insert_check(const_iteratorhint,constKeyType&key,
                  KeyTypeKeyComparecomp,insert_commit_data&commit_data);
    >

    Требуется: Comp должен быть функцией сравнения, которая вызывает ту же строгую слабую упорядоченность, что и key_compare. Разница в том, что комп сравнивает произвольный ключ с содержащимися значениями.

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

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

    Сложность: Логарифмическое вообще, но это амортизированное постоянное время, если t вставлено непосредственно перед намёком.

    Броски: Если выполняется функция заказа. Сильная гарантия.

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

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

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

  29. <
    template<typenameIterator>voidinsert(Iteratorb,Iteratore);
    >

    Требуется: Ссылочный итератор должен давать значение l типа value_type.

    Эффекты: Пытается вставить каждый элемент диапазона в контейнер.

    Сложность: Диапазон вставки, как правило, O(N * log(N)), где N - размер диапазона. Однако он является линейным в N, если диапазон уже отсортирован по значению_comp().

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

    Примечание: Не влияет на достоверность итераторов и ссылок. Копировальными конструкторами не называются.

  30. <
    iteratorinsert_commit(referencevalue,
                          constinsert_commit_data&commit_data);
    >

    Требуется: Значение должно быть значением типа value_type. commit_data должны быть получены из предыдущего вызова на «insert_check». Никакие объекты не должны были быть вставлены или стерты из контейнера между «insert_check», который заполнил «commit_data» и призывом «insert_commit».

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

    Возвращение: Итератор для вновь вставленного объекта.

    Сложность:

    Бросает: Ничего.

    Примечания: Эта функция имеет смысл только в том случае, если ранее была выполнена «insert_check» для заполнения «commit_data». Не следует вставлять или стирать значение между вызовами «insert_check» и «insert_commit».

  31. <
    iteratorinsert_before(const_iteratorpos,referencevalue);
    >

    Требуется: Значение должно быть значением l, "pos" должно быть действительным итератором (или концом) и должно быть датчиком значения после вставки в соответствии с предикатом

    : Вставляет х в контейнер перед "по".

    Сложность:

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

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

  32. <
    voidpush_back(referencevalue);
    >

    Требуется: Значение должно быть значением l, и оно должно быть не меньше, чем наибольший вставленный ключ

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

    Сложность:

    Бросает: Ничего.

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

  33. <
    voidpush_front(referencevalue);
    >

    Требуется: Значение должно быть значением l, и оно не должно быть больше минимального вставленного ключа

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

    Сложность:

    Бросает: Ничего.

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

  34. <
    iteratorerase(const_iteratori);
    >

    Эффекты: Стирает элемент, на который указывает i.

    Сложность: Средняя сложность для элемента стирания — постоянное время.

    Бросает:

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Деструкторы не называются.

  35. <
    iteratorerase(const_iteratorb,const_iteratore);
    >

    Эффекты: Уничтожает диапазон, указанный на b-конце e.

    Сложность: Средняя сложность для диапазона стирания составляет максимум O(log(size() + N)), где N - число элементов в диапазоне.

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

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Деструкторы не называются.

  36. <
    size_typeerase(constkey_type&key);
    >

    Эффекты: Стирает все элементы с заданным значением.

    Возврат: Количество стертых элементов.

    Сложность: O(log(size() + N)

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

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Деструкторы не называются.

  37. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     size_typeerase(constKeyType&key,KeyTypeKeyComparecomp);
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено по отношению к comp(nk, key) и !comp(key, nk), при этом comp(nk, key) подразумевает !comp(key, nk), при этом nk ключ_тип значения_type вставлен в<*this>.

    Эффекты: Стирает все элементы заданным ключом. Согласно сравнительным функторам «комп.»

    Возвращение: Количество стертых элементов.

    Сложность: O(log(size() + N)

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

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Деструкторы не называются.

  38. <
    template<typenameDisposer>
     iteratorerase_and_dispose(const_iteratori,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    : Стирает элемент, на который указывает i. Утилизатор::оператор()(указатель) вызывается для удаленного элемента.

    Сложность: Средняя сложность для элемента стирания — постоянное время.

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

    Примечание: Инвалидирует итераторы на стертые элементы.

  39. <
    template<typenameDisposer>
     iteratorerase_and_dispose(const_iteratorb,const_iteratore,
                                Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(поинт) не должен бросать.

    Эффекты: Уничтожает диапазон, указанный на b-конце e. Утилизатор::оператор()(указатель) вызывается для удаленных элементов.

    Сложность: Средняя сложность для диапазона стирания составляет максимум O(log(size()+N)), где N - число элементов в диапазоне.

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

    Примечание: Инвалидирует итераторы на стертые элементы.

  40. <
    template<typenameDisposer>
     size_typeerase_and_dispose(constkey_type&key,Disposerdisposer);
    >

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает все элементы с заданным значением. Диспозитор::оператор()(указатель) вызывается для удаленных элементов.

    Возвращение: Число стертых элементов.

    Сложность: O(log(size() + N).

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

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Деструкторы не называются.

  41. <
    template<typenameKeyType,typenameKeyTypeKeyCompare,typenameDisposer>
     size_typeerase_and_dispose(constKeyType&key,KeyTypeKeyComparecomp,
                                 Disposerdisposer);
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено относительно comp(nk, key) и !comp(key, nk), причем comp(nk, key) подразумевает !comp(key, nk) и nk ключ_тип значения_типа, вставленный в<*this>.

    Требует: Диспетчер::оператор()(указатель) не должен бросать.

    Эффекты: Стирает все элементы заданным ключом. по сравнению с функтором «комп». Диспозитор::оператор()(указатель) вызывается для удаленных элементов.

    Возвращение: Число стертых элементов.

    Сложность: O(log(size() + N.]

    Бросает: Ничего.

    Примечание: Инвалидирует итераторы на стертые элементы.

  42. <
    voidclear();
    >

    Эффекты: Стирает все элементы.

    Сложность: Линейный по количеству элементов на контейнере. Если это безопасный режим или авто-разъединить значение_тип. Постоянное время иначе.

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

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Деструкторы не называются.

  43. <
    template<typenameDisposer>voidclear_and_dispose(Disposerdisposer);
    >

    Эффекты: Стирает все элементы, вызывающие диспергатор (p), чтобы каждый узел был стерт.Сложность: Средняя сложность составляет максимум O(log(size()+N)), где N - количество элементов в контейнере.

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

    Примечание: Инвалидирует итераторы (но не ссылки) на стертые элементы. Звонки N раз для удаления функтора.

  44. <
    size_typecount(constkey_type&key)const;
    >

    Эффекты: Возвращает число содержащихся элементов с заданным значением

    Сложность: Логарифмическое к числу содержащихся элементов плюс линейное к числу объектов с заданным значением.

    Броски: Если<key_compare>бросит. Дополнительное примечание: функция const не выполняется

  45. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     size_typecount(constKeyType&key,KeyTypeKeyComparecomp)const;
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено относительно comp(nk, key) и !comp(key, nk), причем comp(nk, key) подразумевает !comp(key, nk), а nk - ключ_тип значения_type, вставленный в<*this>.

    Эффекты: Возвращает число содержащихся элементов с заданным ключом

    Сложность: Логарифмическое к числу содержащихся элементов плюс линейное к числу объектов с заданным ключом.

    Бросок: Если<comp>бросит. Дополнительное примечание: функция const не выполняется

  46. <
    size_typecount(constkey_type&key)const;
    >

    Эффекты: Возвращает число содержащихся элементов с заданным значением

    Сложность: Логарифмическое к числу содержащихся элементов плюс линейное к числу объектов с заданным значением.

    Броски: Если<key_compare>бросок. Дополнительное примечание: функция const не выполняется

  47. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     size_typecount(constKeyType&key,KeyTypeKeyComparecomp)const;
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено относительно comp(nk, key) и !comp(key, nk), причем comp(nk, key) подразумевает !comp(key, nk), и nk ключ_тип значения_type вставлен в<*this>.

    Эффекты: Возвращает число содержащихся элементов с заданным ключом

    Сложность: Логарифмическое к числу содержащихся элементов плюс линейное к числу объектов с заданным ключом.

    Бросок: Если<comp>бросит. Дополнительное примечание: функция const не выполняется

  48. <
    iteratorlower_bound(constkey_type&key);
    >

    Эффекты: Возвращает итератор к первому элементу, ключ которого не меньше k или конца (), если этот элемент не существует.

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

    Бросок: Если<key_compare>бросок. Дополнительное примечание: выполняется неконст-функция, игра.

  49. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     iteratorlower_bound(constKeyType&key,KeyTypeKeyComparecomp);
    >

    Эффекты: Возвращает итератор к первому элементу, ключ которого не меньше k или конца (), если этот элемент не существует.

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

    Бросок: Если<key_compare>бросит. Дополнительное примечание: неконст-функция, игра выполняется для первого элемента равного диапазона «ключ»

  50. <
    const_iteratorlower_bound(constkey_type&key)const;
    >

    Эффекты: Возвращает итератор к первому элементу, ключ которого не меньше k или конца (), если этот элемент не существует.

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

    Бросок: Если<key_compare>бросит. Дополнительное примечание: функция const не выполняется

  51. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     const_iterator
     lower_bound(constKeyType&key,KeyTypeKeyComparecomp)const;
    >

    Эффекты: Возвращает итератор к первому элементу, ключ которого не меньше k или конца (), если этот элемент не существует.

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

    Бросает: Если<key_compare>бросит. Дополнительное примечание: функция const не выполняется

  52. <
    iteratorupper_bound(constkey_type&key);
    >

    Эффекты: Возвращает итератор к первому элементу, ключ которого больше k или конца(), если этот элемент не существует.

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

    Броски: Если<key_compare>бросок. Дополнительное примечание: неконст-функция, игра выполняется для первого элемента равного диапазона «значения»

  53. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     iteratorupper_bound(constKeyType&key,KeyTypeKeyComparecomp);
    >

    Требуется: Ключ является значением, таким, что<*this>разделен относительно !comp(ключ, nk), с nk ключ_тип значения_тип вставлен в<*this>.

    Эффекты: Возвращает итератор к первому элементу, ключ которого больше k по компу или концу(), если этот элемент не существует.

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

    Бросок: Если<comp>бросок. Дополнительное примечание: неконст-функция, игра выполняется для первого элемента равного диапазона «ключа»

  54. <
    const_iteratorupper_bound(constkey_type&key)const;
    >

    Эффекты: Возвращает итератор к первому элементу, ключ которого больше k или конца(), если этот элемент не существует.

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

    Бросок: Если бросит<key_compare>. Дополнительное примечание: функция const не выполняется

  55. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     const_iterator
     upper_bound(constKeyType&key,KeyTypeKeyComparecomp)const;
    >

    Требуется: ключ является значением, таким, что<*this>разделено относительно !comp(ключ, nk), с nk ключ_тип значения_тип вставлен в<*this>.

    Эффекты: Возвращает итератор к первому элементу, ключ которого больше k по компу или концу(), если этот элемент не существует.

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

    Броски: Если<comp>бросок. Дополнительное примечание: функция const не выполняется

  56. <
    iteratorfind(constkey_type&key);
    >

    Эффекты: Найден итератор первого элемента, ключом которого является k или конец(), если этот элемент не существует.

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

    Бросок: Если бросит<key_compare>. Дополнительное примечание: неконст-функция, игра выполняется для первого элемента равного диапазона «значения»

  57. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     iteratorfind(constKeyType&key,KeyTypeKeyComparecomp);
    >

    Требуется: ключ является значением, таким, что<*this>разбивается по отношению к comp(nk, key) и !comp(key, nk), причем comp(nk, key) подразумевает !comp(key, nk), а nk ключ_тип значения_type вставляется в<*this>.

    Эффекты: Найден итератор к первому элементу, ключ которого k или конец(), если этот элемент не существует.

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

    Броски: Если<comp>бросок. Дополнительное примечание: неконст-функция, игра выполняется для первого элемента равного диапазона «ключ»

  58. <
    const_iteratorfind(constkey_type&key)const;
    >

    Эффекты: Найден итератор к первому элементу, ключ которого k или конец(), если этот элемент не существует.

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

    Бросок: Если<key_compare>бросит. Дополнительное примечание: функция const не выполняется

  59. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     const_iteratorfind(constKeyType&key,KeyTypeKeyComparecomp)const;
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено относительно comp(nk, key) и !comp(key, nk), причем comp(nk, key) подразумевает !comp(key, nk), а nk - ключ_тип значения_типа, вставленный в<*this>.

    Эффекты: Найден итератор к первому элементу, ключ которого k или конец(), если этот элемент не существует.

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

    Бросок: Если<comp>бросит. Дополнительное примечание: функция const не выполняется

  60. <
    std::pair<iterator,iterator>equal_range(constkey_type&key);
    >

    Эффекты: Найден диапазон, содержащий все элементы, ключ которых k или пустой диапазон, который указывает положение, в котором эти элементы были бы, если бы у них не было элементов с ключом k.

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

    Бросок: Если<key_compare>бросок.

  61. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     std::pair<iterator,iterator>
     equal_range(constKeyType&key,KeyTypeKeyComparecomp);
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено по отношению к comp(nk, key) и !comp(key, nk), с comp(nk, key), подразумевающим !comp(key, nk), с nk ключ_тип значения_type вставлен в<*this>.

    Эффекты: Найден диапазон, содержащий все элементы, ключ которых k или пустой диапазон, который указывает положение, в котором эти элементы были бы, если бы у них не было элементов с ключом k.

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

    Броски: Если<comp>бросок.

  62. <
    std::pair<const_iterator,const_iterator>
    equal_range(constkey_type&key)const;
    >

    Эффекты: Найден диапазон, содержащий все элементы, ключ которых k или пустой диапазон, который указывает положение, в котором эти элементы были бы, если бы у них не было элементов с ключом k.

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

    Бросок: Если<key_compare>бросит.

  63. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     std::pair<const_iterator,const_iterator>
     equal_range(constKeyType&key,KeyTypeKeyComparecomp)const;
    >

    Требуется: Ключ - это значение, такое, что<*this>разделено по отношению к comp(nk, key) и !comp(key, nk), с comp(nk, key), подразумевающим !comp(key, nk), с nk ключ_тип значения_type вставлен в<*this>.

    Эффекты: Найден диапазон, содержащий все элементы, ключ которых k или пустой диапазон, который указывает положение, в котором эти элементы были бы, если бы у них не было элементов с ключом k.

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

    Броски: Если<comp>бросок.

  64. <
    std::pair<iterator,iterator>
    bounded_range(constkey_type&lower_key,constkey_type&upper_key,
                 boolleft_closed,boolright_closed);
    >

    Требует:<upper_key>не должен предшествовать<lower_key>в соответствии с key_compare. [key_comp() (верхний_key, нижний_key) должен быть ложным]

    <lower_key>Если<lower_key>эквивалентен<upper_key>[!key_comp() (верхний_key, нижний_key) && !key_comp() (нижний_key, верхний_key)] тогда ['left_closed' | | 'right_closed') должен быть ложным.

    ЭффектыВозвращает пару со следующими критериями:

    первый = нижний_bound(lower_key) если левый_замкнут, верхний_bound(lower_key) иначе

    второй = верхний_bound(upper_key) если правый_замкнут, нижний_bound(upper_key) иначе

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

    Броски: Если<key_compare>бросает.

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

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

  65. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     std::pair<iterator,iterator>
     bounded_range(constKeyType&lower_key,constKeyType&upper_key,
                   KeyTypeKeyComparecomp,boolleft_closed,boolright_closed);
    >

    Требует:<lower_key>является значением, таким, что<*this>разделено по отношению к comp(nk, lower_key), если левое_закрыто истинно, по отношению к !comp(lower_key, nk) иначе.

    <upper_key>является значением, таким, что<*this>разбивается по отношению к !comp(upper_key, nk), если право_closed истинно, по отношению к comp(nk, upper_key) иначе.

    <upper_key>не должен предшествовать<lower_key>согласно comp [comp(upper_key, lower_key) должен быть ложным]

    Если<lower_key>эквивалентен<upper_key>[!comp(upper_key, lower_key) && !comp(lower_key, upper_key)], то ('left_closed' | | 'right_closed') должен быть ложным.

    Эффекты: Возвращает пару со следующими критериями:

    первый = нижний_bound(lower_key, comp) если левый_замкнут, верхний_bound(lower_key, comp) в противном случае

    второй = верхний_bound(upper_key, comp) если правый_замкнут, нижний_bound(upper_key, comp) в противном случае

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

    Бросок: Если<comp>бросает.

    Примечание: Эта функция может быть более эффективной, чем вызов top_bound и lower_bound для low_key и upper_key.

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

  66. <
    std::pair<const_iterator,const_iterator>
    bounded_range(constkey_type&lower_key,constkey_type&upper_key,
                 boolleft_closed,boolright_closed)const;
    >

    Требует:<upper_key>не должен предшествовать<lower_key>в соответствии с key_compare. [key_comp()(upper_key, lower_key) должен быть ложным]

    Если<lower_key>эквивалентен<upper_key>[!key_comp()(!upper_key, lower_key) && !key_comp()((lower_key, upper_key)] тогда ['left_closed' | | 'right_closed') должно быть ложным

    : Возвращает пару со следующими критериями:

    первый = нижний_связанный (нижний_ключ), если левый_закрытый, верхний_связанный (нижний_ключ) в противном случае

    второй = верхний_связанный (верхний_ключ), если правый_закрытый, нижний_связанный (верхний_ключ) в противном случае

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

    Бросок: Если<key_compare>бросает.

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

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

  67. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     std::pair<const_iterator,const_iterator>
     bounded_range(constKeyType&lower_key,constKeyType&upper_key,
                   KeyTypeKeyComparecomp,boolleft_closed,boolright_closed)const;
    >

    :<lower_key>является значением, таким, что<*this>разделено по отношению к comp(nk, lower_key), если левое_закрыто истинно, по отношению к !comp(lower_key, nk) в противном случае.

    <upper_key>является значением, таким, что<*this>разделено по отношению к !comp(upper_key, nk), если право_закрыто истинно, по отношению к comp(nk, upper_key) в противном случае.

    <upper_key>не должен предшествовать<lower_key>согласно comp [comp(upper_key, lower_key) должен быть ложным]

    Если<lower_key>эквивалентно<upper_key>[!comp(upper_key, lower_key) && !comp(lower_key, upper_key)], то ('left_closed' | | 'right_closed') должно быть ложным.

    Эффекты: Возвращает пару со следующими критериями:

    первый = нижний_bound(lower_key, comp) если левый_замкнут, верхний_bound(lower_key, comp) в противном случае

    второй = верхний_bound(upper_key, comp) если правый_замкнут, нижний_bound(upper_key, comp) в противном случае

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

    Броски: Если<comp>бросает.

    Примечание: Эта функция может быть более эффективной, чем вызов top_bound и lower_bound для low_key и upper_key.

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

  68. <
    iteratoriterator_to(referencevalue);
    >

    Требуется: Значение должно быть lvalue и должно быть в наборе соответствующего типа. В противном случае поведение не определено.

    Эффекты: Возврат: действительный итератор i, относящийся к набору, который указывает на значение

    Сложность: Постоянная.

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

  69. <
    const_iteratoriterator_to(const_referencevalue)const;
    >

    Требует: Значение должно быть lvalue и должно быть в наборе соответствующего типа. В противном случае поведение не определено.

    Эффекты: Возврат: действительный const_iterator i, принадлежащий набору, который указывает на значение

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

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

  70. <
    pointerunlink_leftmost_without_rebalance();
    >

    Эффекты: Отсоединяет левый узел от контейнера.

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

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

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

  71. <
    voidreplace_node(iteratorreplace_this,referencewith_this);
    >

    Требует: Заменить_это должен быть действительный итератор *это и с_это не должно быть вставлено в любой контейнер.

    Эффекты: Заменяет замену_this в своем положении в контейнере с_this. Контейнер не нужно перебалансировать.

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

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

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

  72. <
    voidremove_node(referencevalue);
    >

    Эффекты: удаляет «значение» из контейнера.

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

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

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

    Если пользователь называет эту функцию контейнером с постоянным размером времени или функтором сравнения состояния, будет выпущена ошибка компиляции.

  73. <
    voidsplay_up(iteratori);
    >

    Требует: Я должен быть действительным итератором этого.

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

    Сложность: Амортизированный логарифм.

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

  74. <
    template<typenameKeyType,typenameKeyTypeKeyCompare>
     iteratorsplay_down(constKeyType&key,KeyTypeKeyComparecomp);
    >

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

    Сложность: Амортизированный логарифм.

    Возвращение: Итератор к новому корню дерева, конец (), если дерево пусто.

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

  75. <
    iteratorsplay_down(constkey_type&key);
    >

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

    Сложность: Амортизированный логарифм.

    Возвращение: Итератор к новому корню дерева, конец (), если дерево пусто.

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

  76. <
    voidrebalance();
    >

    Эффекты: Перебалансирует дерево.

    Бросает: Ничего.

    Сложность: Линейный.

  77. <
    iteratorrebalance_subtree(iteratorroot);
    >

    Требуется: Old_root — это узел дерева.

    Эффекты: Уравновешивает дерево, укорененное в старом корне.

    Возвращение: Новый корень дерева

    Бросает: Ничего.

    Сложность: Линейный к элементам в поддереве.

  78. <
    template<class...Options2>voidmerge(splay_set<T,Options2...>&source);
    >

    Требуется: Варианты контейнера "источник" могут отличаться только функцией сравнения от *этого.

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

    Посткондиционер: Указатели и ссылки на переданные элементы источника относятся к тем же элементам, но как к членам этого. Итераторы, относящиеся к переданным элементам, будут продолжать ссылаться на их элементы, но теперь они ведут себя как итераторы в это, а не в источник.

    Бросок: Ничего, если объект сравнения не бросит.

    Сложность: N log(a.size() + N) (N имеет значение source.size())

  79. <
    template<class...Options2>
     voidmerge(splay_multiset<T,Options2...>&source);
    >

    Требуется: Варианты контейнера "источник" могут отличаться только функцией сравнения от *этого.

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

    Посткондиционер: Указатели и ссылки на переданные элементы источника относятся к тем же элементам, но как к членам этого. Итераторы, относящиеся к переданным элементам, будут продолжать ссылаться на их элементы, но теперь они ведут себя как итераторы в это, а не в источник.

    Бросок: Ничего, если объект сравнения не бросит.

    Сложность: N log(a.size() + N) (N имеет значение source.size())

splay_set public static functions

  1. <
    staticsplay_set&container_from_end_iterator(iteratorend_iterator);
    >

    Предварительное условие: end_iterator должен быть действительным конечным итератором контейнера.

    Эффекты: Возвращает конст-ссылку на контейнер, связанный с конечным итератором

    Бросает: Ничего.

    Сложность: Постоянная.

  2. <
    staticconstsplay_set&
    container_from_end_iterator(const_iteratorend_iterator);
    >

    Предварительное условие: end_iterator должен быть действительным конечным итератором контейнера.

    Эффекты: Возвращает конст-ссылку на контейнер, связанный с конечным итератором

    Бросает: Ничего.

    Сложность: Постоянная.

  3. <
    staticsplay_set&container_from_iterator(iteratorit);
    >

    Предварительное условие: он должен быть действительным итератором контейнера.

    Эффекты: Возвращает ссылку на контейнер, связанный с итератором

    Бросает: Ничего.

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

  4. <
    staticconstsplay_set&container_from_iterator(const_iteratorit);
    >

    Предварительное условие: он должен быть действительным итератором контейнера.

    Эффекты: Возвращает ссылку на контейнер, связанный с итератором

    Бросает: Ничего.

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

  5. <
    staticiterators_iterator_to(referencevalue);
    >

    Требуется: Значение должно быть lvalue и должно быть в наборе соответствующего типа. В противном случае поведение не определено.

    Эффекты: Возврат: действительный итератор i, относящийся к набору, который указывает на значение

    Сложность: Постоянная.

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

    Примечание: Эта статическая функция доступна только в том случае, еслисвойстване имеют состояния.

  6. <
    staticconst_iterators_iterator_to(const_referencevalue);
    >

    Требуется: Значение должно быть lvalue и должно быть в наборе соответствующего типа. В противном случае поведение не определено.

    Эффекты: Возврат: действительный итератор i, относящийся к набору, который указывает на значение

    Сложность: Постоянная.

    Бросает: Ничего.

    Примечание: Эта статическая функция доступна только в том случае, еслисвойстване имеют состояния.

  7. <
    staticvoidinit_node(referencevalue);
    >

    Требуется: Стоимость не должна находиться в контейнере.

    Эффекты: Init_node ставит крючок значения в известное состояние по умолчанию.

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

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

    Примечание: Эта функция помещает крюк в известное состояние по умолчанию, используемое auto_unlink и безопасными крючками.


PrevUpHomeNext

Статья Class template splay_set раздела 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 21:15:23/0.017853021621704/0