如何查找哈希表的大小?

时间:2010-08-25 00:42:48

标签: c++ hash hashtable

我有一个像这样定义的哈希表

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

在程序中,我使用fread将a文件的内容读入缓冲区:

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个elemts类型的unsigned long long int以及相同类型的键但是我不能使用sizeof(Mymap)或`size(c1)因为它只返回值32.有没有办法找到它?

谢谢, 苏尼

2 个答案:

答案 0 :(得分:4)

将容器的size属性乘以一对的大小:

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

在我的系统上,打印出来:

  

16384

这不完全准确,因为没有考虑簿记数据。你无法解释它,因为(据我所知),该标准对该实现细节没有任何保证。

如果检查存储区数据,可能会获得稍微好一点的数据。 :: bucket,:: bucket_count,:: bucket_size。这可能只会为您提供有关键,值和对的数据。我没试过。

答案 1 :(得分:3)

所有标准库容器都有一个size()成员函数,它返回容器中元素的数量。

您只需致电c1.size()