首页 > 解决方案 > 是否可以使用 std::array 作为 hash_table 值,但大小不同

问题描述

我在 RAM 中有大量数据,其中每个用户都有几个无符号短(2 字节)值。它们的数量从 0 到 256 不等,但实际情况是我有 1200 万用户只有 1 个值,6M 有 2,3.5M 有 3 等等。最多 1 个用户有 60 个值。

我需要选择一种对内存、访问和修改有效的数据类型。我想为此目的使用向量,但空向量本身的大小是 24 字节。这对我的 RAM 来说太多了。

现在我想使用std::array<>,因为除了里面的数据空间,它不分配任何额外的字节,即

sizeof(std::array<unsigned short, 3>) // 6UL
sizeof(std::vector<unsigned short>) + sizeof(unsigned short) * v.capacity() // 24UL + 6UL

问题是std::array 必须在 compile time 指定大小。正如你可能猜到的,我做不到。有解决方法吗?我将我的用户存储在 hast_table<unsigned int, T> 中。例如,我可以为每个键存储不同大小的数组吗?

标签: c++arrayscachingmemoryhashmap

解决方案


不,恐怕它不适用于不同的尺寸!


推荐阅读