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

Class template unordered_multiset

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 unordered_multiset

boost::intrusive::unordered_multiset

Synopsis

// In header: <boost/intrusive/unordered_set.hpp>
template<typename T, class... Options> 
class unordered_multiset : public boost::intrusive::hashtable< ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags >
{
public:
  // types
  typedef implementation_defined::value_type           value_type;          
  typedef implementation_defined::key_type             key_type;            
  typedef implementation_defined::value_traits         value_traits;        
  typedef implementation_defined::bucket_traits        bucket_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::key_equal            key_equal;           
  typedef implementation_defined::hasher               hasher;              
  typedef implementation_defined::bucket_type          bucket_type;         
  typedef implementation_defined::bucket_ptr           bucket_ptr;          
  typedef implementation_defined::iterator             iterator;            
  typedef implementation_defined::const_iterator       const_iterator;      
  typedef implementation_defined::insert_commit_data   insert_commit_data;  
  typedef implementation_defined::local_iterator       local_iterator;      
  typedef implementation_defined::const_local_iterator const_local_iterator;
  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
  explicit unordered_multiset(const bucket_traits &, 
                              const hasher & = hasher(), 
                              const key_equal & = key_equal(), 
                              const value_traits & = value_traits());
  template<typename Iterator> 
    unordered_multiset(Iterator, Iterator, const bucket_traits &, 
                       const hasher & = hasher(), 
                       const key_equal & = key_equal(), 
                       const value_traits & = value_traits());
  unordered_multiset(unordered_multiset &&);
  unordered_multiset & operator=(unordered_multiset &&);
  ~unordered_multiset();
  // public member functions
  iterator begin();
  const_iterator begin() const;
  const_iterator cbegin() const;
  iterator end();
  const_iterator end() const;
  const_iterator cend() const;
  hasher hash_function() const;
  key_equal key_eq() const;
  bool empty() const;
  size_type size() const;
  void swap(unordered_multiset &);
  template<typename Cloner, typename Disposer> 
    void clone_from(const unordered_multiset &, Cloner, Disposer);
  template<typename Cloner, typename Disposer> 
    void clone_from(unordered_multiset &&, Cloner, Disposer);
  iterator insert(reference);
  template<typename Iterator> void insert(Iterator, Iterator);
  void erase(const_iterator);
  void erase(const_iterator, const_iterator);
  size_type erase(const key_type &);
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    size_type erase(const KeyType &, KeyHasher, KeyEqual);
  template<typename Disposer> void erase_and_dispose(const_iterator, Disposer);
  template<typename Disposer> 
    void erase_and_dispose(const_iterator, const_iterator, Disposer);
  template<typename Disposer> 
    size_type erase_and_dispose(const key_type &, Disposer);
  template<typename KeyType, typename KeyHasher, typename KeyEqual, 
           typename Disposer> 
    size_type erase_and_dispose(const KeyType &, KeyHasher, KeyEqual, 
                                Disposer);
  void clear();
  template<typename Disposer> void clear_and_dispose(Disposer);
  size_type count(const key_type &) const;
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    size_type count(const KeyType &, KeyHasher, KeyEqual) const;
  iterator find(const key_type &);
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    iterator find(const KeyType &, KeyHasher, KeyEqual);
  const_iterator find(const key_type &) const;
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    const_iterator find(const KeyType &, KeyHasher, KeyEqual) const;
  std::pair< iterator, iterator > equal_range(const key_type &);
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    std::pair< iterator, iterator > 
    equal_range(const KeyType &, KeyHasher, KeyEqual);
  std::pair< const_iterator, const_iterator > 
  equal_range(const key_type &) const;
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    std::pair< const_iterator, const_iterator > 
    equal_range(const KeyType &, KeyHasher, KeyEqual) const;
  iterator iterator_to(reference);
  const_iterator iterator_to(const_reference) const;
  local_iterator local_iterator_to(reference);
  const_local_iterator local_iterator_to(const_reference) const;
  size_type bucket_count() const;
  size_type bucket_size(size_type) const;
  size_type bucket(const key_type &) const;
  template<typename KeyType, typename KeyHasher> 
    size_type bucket(const KeyType &, KeyHasher) const;
  bucket_ptr bucket_pointer() const;
  local_iterator begin(size_type);
  const_local_iterator begin(size_type) const;
  const_local_iterator cbegin(size_type) const;
  local_iterator end(size_type);
  const_local_iterator end(size_type) const;
  const_local_iterator cend(size_type) const;
  void rehash(const bucket_traits &);
  void full_rehash();
  bool incremental_rehash(bool = true);
  bool incremental_rehash(const bucket_traits &);
  size_type split_count() const;
  // public static functions
  static local_iterator s_local_iterator_to(reference);
  static const_local_iterator s_local_iterator_to(const_reference);
  static size_type suggested_upper_bucket_count(size_type);
  static size_type suggested_lower_bucket_count(size_type);
};

Description

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

Unordered_multisetявляется полуинтрузивным контейнером: каждый объект, подлежащий хранению в контейнере, должен содержать надлежащий крючок, но контейнер также нуждается в дополнительной вспомогательной памяти для работы:Unordered_multisetТребуется указатель на массив типа<bucket_type>для передачи в конструкторе. Этот массив ведра должен иметь, по крайней мере, тот же срок службы, что и контейнер. Это делает использованиеunordered_multisetболее сложным, чем чисто навязчивые контейнеры.<bucket_type>является дефолтной, копируемой и присваиваемой

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

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

unordered_multisetпредоставляет только передовые итераторы, но предоставляет 4 типа итераторов: итератор и const_iterator для навигации по всему контейнеру и local_iterator и const_local_iterator для навигации по значениям, хранящимся в одном ведре. Местные итераторы быстрее и меньше.

Не рекомендуется использовать непостоянный размер unordered_multisets, потому что несколько ключевых функций, таких как «пустое()», становятся непостоянными функциями времени. Непостоянный размер unordered_multisets в основном обеспечивается для поддержки автоматических крючков.

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

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

unordered_multiset public construct/copy/destruct

  1. <
    explicitunordered_multiset(constbucket_traits&b_traits,
                               consthasher&hash_func=hasher(),
                               constkey_equal&equal_func=key_equal(),
                               constvalue_traits&v_traits=value_traits());
    >

    Требуется: Ведра не должны использоваться никаким другим ресурсом.

    Эффекты: Конструирует пустое<unordered_set>, сохраняя ссылку на массив ковша и копии ключа_hasher и равного_func функторов.

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

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

    Примечания: Решетка ведер должна быть утилизирована только после *это утилизировано.

  2. <
    template<typenameIterator>
     unordered_multiset(Iteratorb,Iteratore,constbucket_traits&b_traits,
                        consthasher&hash_func=hasher(),
                        constkey_equal&equal_func=key_equal(),
                        constvalue_traits&v_traits=value_traits());
    >

    Требуется: Ведра не должны использоваться каким-либо другим ресурсом, и итератор отсчета должен давать lvalue of type value_type.

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

    .Сложность: Если N - расстояние (b, e): Средний случай - O(N) (с хорошей хеш-функцией и с ведрами_len >= N), худший случай O(N2).

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

    Примечания: Решетка ведер должна быть утилизирована только после *это утилизировано.

  3. <
    unordered_multiset(unordered_multiset&&x);
    >

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

  4. <
    unordered_multiset&operator=(unordered_multiset&&x);
    >

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

  5. <
    ~unordered_multiset();
    >

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

    Сложность: Линейный по количеству элементов в<unordered_set>, если это безопасное или автоматическое значение разъединения. В противном случае константа.

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

unordered_multiset public member functions

  1. <
    iteratorbegin();
    >

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

    Сложность: Амортизированное постоянное время. Наихудший случай (пустый<unordered_set>): О (это->bucket_count())

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

  2. <
    const_iteratorbegin()const;
    >

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

    Сложность: Амортизированное постоянное время. Наихудший случай (пустый<unordered_set>): О (это->bucket_count())

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

  3. <
    const_iteratorcbegin()const;
    >

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

    Сложность: Амортизированное постоянное время. Наихудший случай (пустый<unordered_set>): О (это->bucket_count())

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

  4. <
    iteratorend();
    >

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

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

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

  5. <
    const_iteratorend()const;
    >

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

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

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

  6. <
    const_iteratorcend()const;
    >

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

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

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

  7. <
    hasherhash_function()const;
    >

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

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

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

  8. <
    key_equalkey_eq()const;
    >

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

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

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

  9. <
    boolempty()const;
    >

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

    Сложность: если размер постоянного времени и<cache_begin>опции отключены, среднее постоянное время (наихудший случай, с пустым() == истинно: O(this->bucket_count()). В противном случае константа.

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

  10. <
    size_typesize()const;
    >

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

    Сложность: Линейный к элементам, содержащимся в *, если<constant_time_size>является ложным. В другое время

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

  11. <
    voidswap(unordered_multiset&other);
    >

    Требуется: Ведра не должны использоваться никаким другим ресурсом.

    Эффекты: Конструирует пустое<unordered_set>, сохраняя ссылку на массив ковша и копии ключа_hasher и равного_func функторов.

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

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

    Примечания: Решетка ведер должна быть утилизирована только после *это утилизировано.

  12. <
    template<typenameCloner,typenameDisposer>
     voidclone_from(constunordered_multiset&src,Clonercloner,
                     Disposerdisposer);
    >

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

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

    Если вариант<store_hash>верен, этот метод не использует хеш-функцию.

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

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

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

  13. <
    template<typenameCloner,typenameDisposer>
     voidclone_from(unordered_multiset&&src,Clonercloner,Disposerdisposer);
    >

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

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

    Если вариант<store_hash>верен, этот метод не использует хеш-функцию.

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

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

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

  14. <
    iteratorinsert(referencevalue);
    >

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

    Эффекты: Вставляет значение в<unordered_set>.

    Возврат: Итератор для вставленного значения.

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

    Бросает: Если бросает внутренний хешер или функтор равенства. Сильная гарантия.

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

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

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

    Эффекты: Эквивалентно этому->insert_equal(t) для каждого элемента в [b, e]

    Сложность: Средний случай O(N), где N - расстояние (b, e). Худший случай O(N*this->size()).

    Бросок: Если бросает внутренний хешер или функтор равенства. Основная гарантия.

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

  16. <
    voiderase(const_iteratori);
    >

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

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

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

  17. <
    voiderase(const_iteratorb,const_iteratore);
    >

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

    Сложность: Средний случай O (расстояние (b, e)), наихудший случай O (это->размер()).

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

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

  18. <
    size_typeerase(constkey_type&key);
    >

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

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

    Сложность: Средний случай O(this->count(value)). Наихудший случай O(this->size()).

    Бросок: Если бросает внутренний хешер или функтор равенства. Основная гарантия.

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

  19. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     size_typeerase(constKeyType&key,KeyHasherhash_func,
                     KeyEqualequal_func);
    >

    Требуется: «hash_func» должен быть хеш-функцией, которая индуцирует те же хеш-значения, что и хранимый хеш-хэш. Разница в том, что «hash_func» хэширует данный ключ вместо значения_type.

    «equal_func» должен быть функцией равенства, которая вызывает то же равенство, что и ключ_equal. Разница в том, что «equal_func» сравнивает произвольный ключ с содержащимися значениями.

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

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

    Сложность: Средний случай O(this->count(value)). Наихудший случай O(this->size()).

    Бросок: Если хеш_func или равно_func бросок. Базовая гарантия.

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

  20. <
    template<typenameDisposer>
     voiderase_and_dispose(const_iteratori,Disposerdisposer);
    >

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

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

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

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

  21. <
    template<typenameDisposer>
     voiderase_and_dispose(const_iteratorb,const_iteratore,
                            Disposerdisposer);
    >

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

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

    Сложность: Средний случай O (расстояние (b, e)), наихудший случай O (это->размер()).

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

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

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

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

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

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

    Сложность: Средний случай O(this->count(value)). Наихудший случай O(this->size()).

    Бросок: Если бросает внутренний хешер или функтор равенства. Основная гарантия.

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

  23. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual,
            typenameDisposer>
     size_typeerase_and_dispose(constKeyType&key,KeyHasherhash_func,
                                 KeyEqualequal_func,Disposerdisposer);
    >

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

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

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

    Сложность: Средний случай O(this->count(value)). Наихудший случай O(this->size()).

    Бросок: Если хеш_func или равно_func бросок. Основная гарантия.

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

  24. <
    voidclear();
    >

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

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

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

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

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

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

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

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

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

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

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

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

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

  27. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     size_typecount(constKeyType&key,KeyHasherhash_func,
                     KeyEqualequal_func)const;
    >

    Требует: «hash_func» должен быть хеш-функцией, которая вызывает те же хеш-значения, что и хранимый хэш. Разница в том, что «hash_func» хэширует данный ключ вместо значения_типа.

    «equal_func» должен быть функцией равенства, которая вызывает то же равенство, что и ключ_equal. Разница в том, что «equal_func» сравнивает произвольный ключ с содержащимися значениями.

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

    Бросок: Если хеш_функция или равный бросок.

  28. <
    iteratorfind(constkey_type&key);
    >

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

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

  29. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     iteratorfind(constKeyType&key,KeyHasherhash_func,KeyEqualequal_func);
    >

    Требуется: «hash_func» должен быть хеш-функцией, которая индуцирует те же хеш-значения, что и хранимый хэш. Разница в том, что «hash_func» хэширует данный ключ вместо значения_type.

    «equal_func» должен быть функцией равенства, которая вызывает то же равенство, что и ключ_equal. Разница в том, что «equal_func» сравнивает произвольный ключ с содержащимися значениями.

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

    Бросок: Если хеш_func или равно_func бросок.

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

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

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

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

  31. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     const_iterator
     find(constKeyType&key,KeyHasherhash_func,KeyEqualequal_func)const;
    >

    Требуется: «hash_func» должен быть хеш-функцией, которая вызывает те же хеш-значения, что и хранимый хеш-хеш. Разница в том, что «hash_func» хэширует заданный ключ вместо значения_типа.

    «equal_func» должна быть функцией равенства, которая вызывает то же равенство, что и ключевое_equal. Разница в том, что «equal_func» сравнивает произвольный ключ с содержащимися значениями.

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

    Сложность: Средний случай O(1), наихудший случай O(this->size()).

    Бросок: Если хеш_func или равно_func бросок.

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

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

    Эффекты: Возвращает диапазон, содержащий все элементы со значениями, эквивалентными значению. Возвращает std::make_pair(this->end(), this->end()), если таких элементов не существует.

    Сложность: Средний случай O(this->count(value)). Наихудший случай O(this->size()).

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

  33. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     std::pair<iterator,iterator>
     equal_range(constKeyType&key,KeyHasherhash_func,KeyEqualequal_func);
    >

    Требуется: «hash_func» должен быть хеш-функцией, которая индуцирует те же хеш-значения, что и хранимый хеш-хэш. Разница в том, что «hash_func» хэширует данный ключ вместо значения_type.

    «equal_func» должен быть функцией равенства, которая вызывает то же равенство, что и ключ_equal. Разница в том, что «equal_func» сравнивает произвольный ключ с содержащимися значениями.

    Эффекты: Возвращает диапазон, содержащий все элементы с эквивалентными ключами. Возвращает std::make_pair(this->end(), this->end()), если таких элементов не существует.

    Сложность: Средний случай O(this->count(key, hash_func, equal_func)). Наихудший случай O(this->size()).

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

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

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

    Эффекты: Возвращает диапазон, содержащий все элементы со значениями, эквивалентными значению. Возвращает std::make_pair(this->end(), this->end()), если таких элементов не существует.

    Сложность: Средний случай O(this->count(value)). Наихудший случай O(this->size()).

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

  35. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     std::pair<const_iterator,const_iterator>
     equal_range(constKeyType&key,KeyHasherhash_func,KeyEqualequal_func)const;
    >

    Требует: «hash_func» должен быть хеш-функцией, которая индуцирует те же хеш-значения, что и хранимый хэш. Разница в том, что «hash_func» хэширует данный ключ вместо значения_type.

    «equal_func» должен быть функцией равенства, которая вызывает то же равенство, что и ключ_equal. Разница в том, что «equal_func» сравнивает произвольный ключ с содержащимися значениями.

    Эффекты: Возвращает диапазон, содержащий все элементы с эквивалентными ключами. Возвращает std::make_pair(this->end(), this->end()), если таких элементов не существует.

    Сложность: Средний случай O(this->count(key, hash_func, equal_func)). Наихудший случай O(this->size()).

    Бросок: Если хешер или равнофункциональный бросок.

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

  36. <
    iteratoriterator_to(referencevalue);
    >

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

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

    Сложность:

    Бросок: Если выполняется внутренняя хеш-функция.

  37. <
    const_iteratoriterator_to(const_referencevalue)const;
    >

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

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

    Сложность:

    Бросок: Если выполняется внутренняя хеш-функция.

  38. <
    local_iteratorlocal_iterator_to(referencevalue);
    >

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

    Эффекты: Возврат: действительный локальный_iterator, принадлежащий<unordered_set>, который указывает на значение

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

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

  39. <
    const_local_iteratorlocal_iterator_to(const_referencevalue)const;
    >

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

    Эффекты: Возврат: действительный локальный_iterator, принадлежащий<unordered_set>, который указывает на значение

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

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

  40. <
    size_typebucket_count()const;
    >

    Эффекты: Возвращает количество ведер, пропущенных в конструкторе, или последнюю функцию рехэша.

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

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

  41. <
    size_typebucket_size(size_typen)const;
    >

    Требует: n находится в диапазоне [0, это->bucket_count()].

    Эффекты: Возвращает число элементов в n-м ведре.

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

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

  42. <
    size_typebucket(constkey_type&k)const;
    >

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

    Сложность:

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

    Примечание: возвращаемое значение находится в диапазоне [0, this->bucket_count()].

  43. <
    template<typenameKeyType,typenameKeyHasher>
     size_typebucket(constKeyType&k,KeyHasherhash_func)const;
    >

    Требуется: «hash_func» должен быть хеш-функцией, которая индуцирует те же хеш-значения, что и хранимый хэш. Разница в том, что «hash_func» хэширует данный ключ вместо значения_типа.

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

    Сложность:

    Бросок: Если хэш_функция бросает.

    Примечание: возвращаемое значение находится в диапазоне [0, this->bucket_count()].

  44. <
    bucket_ptrbucket_pointer()const;
    >

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

    Сложность:

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

  45. <
    local_iteratorbegin(size_typen);
    >

    Требует: n находится в диапазоне [0, это->bucket_count()]

    : Возвращает локальный_iterator, указывающий на начало последовательности, хранящейся в ведре n.

    Сложность:

    Бросок:

    Примечание: [this->begin(n), this->end(n)) представляет собой допустимый диапазон, содержащий все элементы в n-м ведре.

  46. <
    const_local_iteratorbegin(size_typen)const;
    >

    Требует: n находится в диапазоне [0, это->bucket_count()]

    : Возвращает const_local_iterator, указывающий на начало последовательности, хранящейся в ведре n.

    Сложность:

    Бросок:

    Примечание: [this->begin(n), this->end(n)) представляет собой допустимый диапазон, содержащий все элементы в n-м ведре.

  47. <
    const_local_iteratorcbegin(size_typen)const;
    >

    Требует: n находится в диапазоне [0, this->bucket_count()]

    : Возвращает const_local_iterator, указывающий на начало последовательности, хранящейся в ведре n.

    Сложность:

    Бросает:

    Примечание: [this->begin(n), this->end(n)) представляет собой допустимый диапазон, содержащий все элементы в n-м ведре.

  48. <
    local_iteratorend(size_typen);
    >

    Требует: n находится в диапазоне [0, this->bucket_count()).

    Эффекты: Возвращает локальный_iterator, указывающий на конец последовательности, хранящейся в ведре n.

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

    Бросает:

    Примечание: [this->begin(n), this->end(n)) представляет собой допустимый диапазон, содержащий все элементы в n-м ведре.

  49. <
    const_local_iteratorend(size_typen)const;
    >

    Требуется: n находится в диапазоне [0, this->bucket_count()).

    Эффекты: Возвращает const_local_iterator, указывающий на конец последовательности, хранящейся в ведре n.

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

    Броски:

    Примечание: [this->begin(n), this->end(n)) представляет собой допустимый диапазон, содержащий все элементы в n-м ведре.

  50. <
    const_local_iteratorcend(size_typen)const;
    >

    Требует: n находится в диапазоне [0, это->bucket_count()].

    Эффекты: Возвращает const_local_iterator, указывающий на конец последовательности, хранящейся в ведре n.

    Сложность:

    Бросок:

    Примечание: [this->begin(n), this->end(n)) представляет собой допустимый диапазон, содержащий все элементы в n-м ведре.

  51. <
    voidrehash(constbucket_traits&new_bucket_traits);
    >

    Требуется: New_bucket_traits может содержать указатель на новый массив ковша или такой же, как старый массив ковша с другой длиной. new_size — длина массива, на который указывают new_buckets. Если new_bucket_traits.bucket_begin() == this->bucket_pointer() new_bucket_traits.bucket_count() может быть больше или меньше, чем this->bucket_count(). Если<new_bucket_traits.bucket_begin() == this->bucket_pointer()>ложно, отсоединяют значения от старого ведра и вставляют затем в новое согласно хеш-значению значений.

    Если<new_bucket_traits.bucket_begin() == this->bucket_pointer()>верно, то реализации максимально избегают движущихся значений.

    Ковшовые черты удерживаются *это присваивается от new_bucket_traits. Если контейнер сконфигурирован как incremental<>, разделительное ведро устанавливается на новый счет bucket_count().

    Если вариант<store_hash>верен, этот метод не использует хеш-функцию. В случае ложности реализация пытается минимизировать вызовы к хеш-функции (например, один раз для эквивалентных значений, если оптимизация_multikeyявляется истинной).

    Если рехэш успешно обновляет внутреннюю<bucket_traits>с новыми_bucket_traits.

    Сложность: Средний случай линейный в этом->size(), худший случай квадратичный.

    Бросок: Если кидает функтор гашера. Базовая гарантия.

  52. <
    voidfull_rehash();
    >

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

    Требуется: Звонки, производимые в хеш-функцию, не должны изменять свойства уникальности уже вставленных элементов. Если хешер(ключ1) == хешер(ключ2) был верен при вставке элементов, он должен быть верен при вызовах, произведенных при выполнении этой функции.

    Ключ_равный не называется внутри этой функции, поэтому предполагается, что ключ_равный(значение1, значение2) должен давать те же результаты, что и раньше для вставленных элементов.

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

    Если опция<store_hash>верна, этот метод использует функцию хеширования и обновляет сохраненное значение хеширования.

    Сложность: Средний случай линейный в этом->size(), худший случай квадратичный.

    Броски: Если кидает функтор гашера. Базовая гарантия.

  53. <
    boolincremental_rehash(boolgrow=true);
    >

    Требуется:

    :

    Сложность:

    Броски:

    Примечание: этот метод доступен только при активации опции incremental.

  54. <
    boolincremental_rehash(constbucket_traits&new_bucket_traits);
    >

    Эффекты: Если new_bucket_traits.bucket_count() не является this->bucket_count()/2 или this->bucket_count()*2, или this->split_bucket()!= new_bucket_traits.bucket_count() возвращается ложным и ничего не делает.

    В противном случае копия присваивает внутренним<bucket_traits>новые_bucket_traits и переносит все предметы из старых ведер в новые.

    Сложность: Линейный размер().

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

    Примечание: Этот метод доступен только при активации опции incremental.

  55. <
    size_typesplit_count()const;
    >

    Требуется: инкрементный<>опция должна быть установлена

    Эффекты: возвращает текущее количество делений

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

    Броски: Ничего (1603)

unordered_multiset public static functions

  1. <
    staticlocal_iterators_local_iterator_to(referencevalue);
    >

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

    Эффекты: Возврат: действительный локальный_iterator, принадлежащий<unordered_set>, который указывает на значение

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

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

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

  2. <
    staticconst_local_iterators_local_iterator_to(const_referencevalue);
    >

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

    Эффекты: Возврат: действительный локальный_iterator, принадлежащий<unordered_set>, который указывает на значение

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

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

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

  3. <
    staticsize_typesuggested_upper_bucket_count(size_typen);
    >

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

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

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

  4. <
    staticsize_typesuggested_lower_bucket_count(size_typen);
    >

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

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

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


PrevUpHomeNext

Статья Class template unordered_multiset раздела 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 08:42:49/0.018265962600708/1