Как узнать размер хеш-таблицы? - PullRequest
3 голосов
/ 25 августа 2010

У меня есть хеш-таблица, определенная следующим образом

typedef std::unordered_map<unsigned long long int,unsigned long long int> table_map;

, и в программе я считываю содержимое файла в буфер, используя fread, как это:

fread(buffer, sizeof(long long int), 1024, file1);

Я объявляю хеш-таблицу как

table_map c1;

Теперь я создаю хеш-таблицу как

for (i = 0; i < 1024; i++)
    c1.insert(table_map::value_type(buffer[i], i));

Теперь у меня есть вопросы, после цикла for, как я могу получить размер хешаТаблица?

Он имеет 1024 элемента типа unsigned long long int, а также ключи того же типа, но я не могу использовать sizeof(Mymap) или `size of (c1), потому что он просто возвращает значение 32. Есть ли какие-либоспособ найти его?

Спасибо, Сунил

Ответы [ 2 ]

4 голосов
/ 25 августа 2010

Умножьте свойство размера контейнера на размер пары:

std::cout << c1.size() * sizeof(table_map::value_type) << "\n";

В моей системе это выводит на печать:

16384

Это не совсем точно, потому что бухгалтерские данные не учитываются. Вы не можете объяснить это, потому что (насколько я знаю) стандарт не имеет никаких гарантий относительно этой детали реализации.

Вы можете получить немного лучшие данные, если изучите данные корзины. :: bucket, :: bucket_count, :: bucket_size. Это может дать вам только данные о ключах, значениях и парах. Я не пробовал это.

3 голосов
/ 25 августа 2010

Все стандартные контейнеры библиотеки имеют функцию-член size(), которая возвращает количество элементов в контейнере.

Вы можете просто позвонить c1.size().

...