[PATCH][Hashtable 2/6] Avoid over-sizing container

François Dumont frs.dumont@gmail.com
Sun Nov 17 20:56:00 GMT 2019


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.

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: hashtable#3.patch
Type: text/x-patch
Size: 9609 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20191117/aa0b6d55/attachment.bin>


More information about the Libstdc++ mailing list