forked from boostorg/unordered
The max_load issue was fixed in the standard ages ago
This commit is contained in:
@ -160,12 +160,9 @@ the expensive rehashing out of the way and let you store iterators, safe in
|
|||||||
the knowledge that they won't be invalidated. If you are inserting `n`
|
the knowledge that they won't be invalidated. If you are inserting `n`
|
||||||
elements into container `x`, you could first call:
|
elements into container `x`, you could first call:
|
||||||
|
|
||||||
x.rehash((x.size() + n) / x.max_load_factor() + 1);
|
x.rehash((x.size() + n) / x.max_load_factor());
|
||||||
|
|
||||||
[blurb Note: `rehash`'s argument is the minimum number of buckets, not the
|
[blurb Note: `rehash`'s argument is the minimum number of buckets, not the
|
||||||
number of elements, which is why the new size is divided by the maximum load factor. The
|
number of elements, which is why the new size is divided by the maximum load factor.]
|
||||||
`+ 1` guarantees there is no invalidation; without it, reallocation could occur
|
|
||||||
if the number of bucket exactly divides the target size, since the container is
|
|
||||||
allowed to rehash when the load factor is equal to the maximum load factor.]
|
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -360,9 +360,8 @@ namespace boost {
|
|||||||
std::size_t num_buckets =
|
std::size_t num_buckets =
|
||||||
boost::unordered::detail::default_bucket_count)
|
boost::unordered::detail::default_bucket_count)
|
||||||
{
|
{
|
||||||
// TODO: Why +1?
|
|
||||||
return (std::max)(
|
return (std::max)(
|
||||||
boost::unordered::detail::insert_size(i, j) + 1, num_buckets);
|
boost::unordered::detail::insert_size(i, j), num_buckets);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -3309,7 +3308,7 @@ namespace boost {
|
|||||||
mlf_ = x.mlf_;
|
mlf_ = x.mlf_;
|
||||||
recalculate_max_load();
|
recalculate_max_load();
|
||||||
|
|
||||||
if (x.size_ >= max_load_) {
|
if (x.size_ > max_load_) {
|
||||||
create_buckets(min_buckets_for_size(x.size_));
|
create_buckets(min_buckets_for_size(x.size_));
|
||||||
} else if (size_) {
|
} else if (size_) {
|
||||||
clear_buckets();
|
clear_buckets();
|
||||||
@ -3384,7 +3383,7 @@ namespace boost {
|
|||||||
mlf_ = x.mlf_;
|
mlf_ = x.mlf_;
|
||||||
recalculate_max_load();
|
recalculate_max_load();
|
||||||
|
|
||||||
if (x.size_ >= max_load_) {
|
if (x.size_ > max_load_) {
|
||||||
create_buckets(min_buckets_for_size(x.size_));
|
create_buckets(min_buckets_for_size(x.size_));
|
||||||
} else if (size_) {
|
} else if (size_) {
|
||||||
clear_buckets();
|
clear_buckets();
|
||||||
|
Reference in New Issue
Block a user