std :: unordered_map <> bucket_count () после перефразировки по умолчанию - PullRequest
1 голос
/ 03 марта 2020

Если я продолжаю добавлять значения в unordered_map, то каждый раз, когда количество элементов превышает bucket_count () (при условии max_load_factor = 1), происходит перефразировка.

Что меня очень смущает, так это размер корзины после rehashing.

#include <iostream>
#include <unordered_map>
int main() {
   std::unordered_map<size_t, size_t> mp;

   for (size_t i = 0; i < 1000; ++i) {
      mp[i] = i;
      std::cout << " count: " << mp.bucket_count() << std::endl;
   }
}

Это выводит 3 7 17 37 79 167 337 709 1493

Я заметил, что размер корзины прост и приблизительно удваивается. Однако это не самое близкое к следующей степени 2 число.

Какова методология этого увеличения размера корзины. Я был удивлен или настолько глуп, что ничего не нашел об этом в стандартных ссылках, таких как cplusplus.com

...