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

Class template hashtable

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 hashtable

boost::intrusive::hashtable

Synopsis

// In header: <boost/intrusive/hashtable.hpp>
template<typename T, class... Options> 
class hashtable : private hashtable_size_traits_wrapper< hashdata_internal< ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags &(hash_bool_flags::incremental_pos|hash_bool_flags::cache_begin_pos) >, SizeType,(BoolFlags &hash_bool_flags::constant_time_size_pos)!=0 >
{
public:
  // types
  typedef ValueTraits                                                            value_traits;        
  typedef value_traits::pointer                                                  pointer;             
  typedef value_traits::const_pointer                                            const_pointer;       
  typedef value_traits::value_type                                               value_type;          
  typedef hash_types_base::key_type                                              key_type;            
  typedef hash_types_base::key_of_value                                          key_of_value;        
  typedef pointer_traits< pointer >::reference                                   reference;           
  typedef pointer_traits< const_pointer >::reference                             const_reference;     
  typedef pointer_traits< pointer >::difference_type                             difference_type;     
  typedef SizeType                                                               size_type;           
  typedef internal_type::key_equal                                               key_equal;           
  typedef internal_type::hasher                                                  hasher;              
  typedef unspecified                                                            bucket_type;         
  typedef internal_type::bucket_ptr                                              bucket_ptr;          
  typedef slist::iterator                                                        siterator;           
  typedef slist::const_iterator                                                  const_siterator;     
  typedef internal_type::iterator                                                iterator;            
  typedef internal_type::const_iterator                                          const_iterator;      
  typedef internal_type::local_iterator                                          local_iterator;      
  typedef internal_type::const_local_iterator                                    const_local_iterator;
  typedef value_traits::node_traits                                              node_traits;         
  typedef node_traits::node                                                      node;                
  typedef pointer_traits< pointer >::template rebind_pointer< node >::type       node_ptr;            
  typedef pointer_traits< pointer >::template rebind_pointer< const node >::type const_node_ptr;      
  typedef pointer_traits< node_ptr >::reference                                  node_reference;      
  typedef pointer_traits< const_node_ptr >::reference                            const_node_reference;
  typedef slist::node_algorithms                                                 node_algorithms;     
  typedef unspecified                                                            insert_commit_data;  
  // construct/copy/destruct
  explicit hashtable(const bucket_traits &, const hasher & = hasher(), 
                     const key_equal & = key_equal(), 
                     const value_traits & = value_traits());
  template<typename Iterator> 
    hashtable(bool, Iterator, Iterator, const bucket_traits &, 
              const hasher & = hasher(), const key_equal & = key_equal(), 
              const value_traits & = value_traits());
  hashtable(hashtable &&);
  hashtable & operator=(hashtable &&);
  ~hashtable();
  // 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(hashtable &);
  template<typename Cloner, typename Disposer> 
    void clone_from(const hashtable &, Cloner, Disposer);
  template<typename Cloner, typename Disposer> 
    void clone_from(hashtable &&, Cloner, Disposer);
  iterator insert_equal(reference);
  template<typename Iterator> void insert_equal(Iterator, Iterator);
  std::pair< iterator, bool > insert_unique(reference);
  template<typename Iterator> void insert_unique(Iterator, Iterator);
  template<typename KeyType, typename KeyHasher, typename KeyEqual> 
    std::pair< iterator, bool > 
    insert_unique_check(const KeyType &, KeyHasher, KeyEqual, 
                        insert_commit_data &);
  std::pair< iterator, bool > 
  insert_unique_check(const key_type &, insert_commit_data &);
  iterator insert_unique_commit(reference, const insert_commit_data &);
  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);
  // public data members
  static const bool stateful_value_traits;
  static const bool store_hash;
  static const bool unique_keys;
  static const bool constant_time_size;
  static const bool cache_begin;
  static const bool compare_hash;
  static const bool incremental;
  static const bool power_2_buckets;
  static const bool optimize_multikey;
};

Description

Шаблон хэштебла класса представляет собой назойливый контейнер хеш-таблицы, который используется для построения назойливыхunordered_setиunordered_multisetконтейнеров. Гарантия «без броска» действует только в том случае, если объект VoidOrKeyEqual и Hasher не бросают.

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

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

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

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

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

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

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

hashtable public construct/copy/destruct

  1. <
    explicithashtable(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>
     hashtable(boolunique,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. <
    hashtable(hashtable&&x);
    >

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

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

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

  5. <
    ~hashtable();
    >

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

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

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

hashtable 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(hashtable&other);
    >

    Требуется: Хэшер и функция равенства неквалифицированный вызов свопа не должны бросаться.

    Эффекты: Обменяйте содержимое двух неупорядоченных наборов. Свопс также содержит массив ведра и равенство и хешер-функторы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  14. <
    iteratorinsert_equal(referencevalue);
    >

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

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

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

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

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

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

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

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

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

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

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

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

  16. <
    std::pair<iterator,bool>insert_unique(referencevalue);
    >

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

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

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

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

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

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

  17. <
    template<typenameIterator>voidinsert_unique(Iteratorb,Iteratore);
    >

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

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

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

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

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

  18. <
    template<typenameKeyType,typenameKeyHasher,typenameKeyEqual>
     std::pair<iterator,bool>
     insert_unique_check(constKeyType&key,KeyHasherhash_func,
                         KeyEqualequal_func,insert_commit_data&commit_data);
    >

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

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

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

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

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

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

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

    Если проверка прошла успешно, пользователь может построить значение_тип и использовать «insert_commit» для вставки объекта в постоянное время.

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

    . После успешного перенастройки вставка_commit_data остается в силе.

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

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

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

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

    Бросок: Если есть хэшер или key_compare бросок. Сильная гарантия.

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

    Если проверка прошла успешно, пользователь может построить значение_тип и использовать «insert_commit» для вставки объекта в постоянное время.

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

    . После успешного перенастройки вставка_commit_data остается в силе.

  20. <
    iteratorinsert_unique_commit(referencevalue,
                                 constinsert_commit_data&commit_data);
    >

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

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

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

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

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

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

    После успешного перенастройки вставка_commit_data остается в силе.

  21. <
    voiderase(const_iteratori);
    >

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

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

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

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

  22. <
    voiderase(const_iteratorb,const_iteratore);
    >

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

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

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

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

  23. <
    size_typeerase(constkey_type&key);
    >

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

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

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

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

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

  24. <
    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 бросок. Основная гарантия.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  29. <
    voidclear();
    >

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  32. <
    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()).

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

  33. <
    iteratorfind(constkey_type&key);
    >

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  36. <
    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 бросок.

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

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

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

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

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

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

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

    «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 бросок.

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

    .
  39. <
    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()).

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

  40. <
    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()).

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

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

    .
  41. <
    iteratoriterator_to(referencevalue);
    >

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

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

    Сложность:

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

  42. <
    const_iteratoriterator_to(const_referencevalue)const;
    >

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

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

    Сложность:

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

  43. <
    local_iteratorlocal_iterator_to(referencevalue);
    >

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

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

    Сложность:

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

  44. <
    const_local_iteratorlocal_iterator_to(const_referencevalue)const;
    >

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

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

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

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

  45. <
    size_typebucket_count()const;
    >

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

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

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

  46. <
    size_typebucket_size(size_typen)const;
    >

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

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

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

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

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

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

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

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

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

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

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

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

    Сложность:

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

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

  49. <
    bucket_ptrbucket_pointer()const;
    >

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

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

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

  50. <
    local_iteratorbegin(size_typen);
    >

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

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

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

    Броски:

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

  51. <
    const_local_iteratorbegin(size_typen)const;
    >

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

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

    Сложность:

    Бросок:

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

  52. <
    const_local_iteratorcbegin(size_typen)const;
    >

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

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

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

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

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

  53. <
    local_iteratorend(size_typen);
    >

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

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

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

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

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

  54. <
    const_local_iteratorend(size_typen)const;
    >

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

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

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

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

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

  55. <
    const_local_iteratorcend(size_typen)const;
    >

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

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

    Сложность:

    Бросок:

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

  56. <
    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() может быть больше или меньше этого->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(), худший случай квадратичный.

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

  57. <
    voidfull_rehash();
    >

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

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

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

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

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

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

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

  58. <
    boolincremental_rehash(boolgrow=true);
    >

    Требуется:

    :

    Сложность:

    Броски:

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

    Рост

  59. <
    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>новые черты ковша и переносит все предметы из старых ведер в новые.

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

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

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

  60. <
    size_typesplit_count()const;
    >

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

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

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

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

hashtable 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>соответствующего типа. В противном случае поведение не определено.

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

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

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

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

  3. <
    staticsize_typesuggested_upper_bucket_count(size_typen);
    >

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

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

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

  4. <
    staticsize_typesuggested_lower_bucket_count(size_typen);
    >

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

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

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


PrevUpHomeNext

Статья Class template hashtable раздела 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 02:20:45/0.03753399848938/1