[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