On 17/11/19 21:56 +0100, François Dumont wrote:
This patch avoids over-sizing of the container by rather considering the bucket count hint or potential reservation.

It concerns only the non-multi containers.

    * include/bits/hashtable.h
    (_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
    const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
    const allocator_type&, __unique_keys_t)): New.
    (_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
    const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
    const allocator_type&, __multi_keys_t)): New.
    (_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
    const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
    const allocator_type&)): Delegate to latters.
    (operator=(initializer_list<value_type>)): Rehash if too small.
    (_M_insert(_Arg&&, const _NodeGenerator&, __unique_keys_t)): Remove
    size_t len parameter.
    * include/bits/hashtable_policy.h (_Insert_base<>::_M_insert_range):
    Do not try to get input range distance.
    * testsuite/23_containers/unordered_set/cons/bucket_hint.cc: New.
    * testsuite/23_containers/unordered_set/modifiers/insert.cc: New.

Tested under Linux x86_64.

OK for master.

Please update the copyright years in the new tests (sorry it took so
long to review it!)


Reply via email to