This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/71181] New: Reserving in unordered_map doesn't reserve enough


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71181

            Bug ID: 71181
           Summary: Reserving in unordered_map doesn't reserve enough
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: riad93 at mail dot ru
  Target Milestone: ---

Code:

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
        std::unordered_map<int, int> x;
        x.reserve(97);
        std::cout << x.bucket_count() << std::endl;
        for (int i = 0; i < 97; ++i) {
                x[i] = 1;
        }
        std::cout << x.bucket_count() << std::endl;
}

it prints for me

97
199

It doesn't contradict my reading of the Standard but still counterintuitive.
If user reserves smth, he would expect no rehashes

Note, probably any prime will do.

Generally, for each as far as I understand rehashing happens when 
new_size >= buckets_count (multiplied by load_factor which is 1)

I propose changing >= to >

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]