【问题标题】:Is it possible to use std::array as a hash_table value, but with different size是否可以使用 std::array 作为 hash_table 值,但大小不同
【发布时间】:2021-04-23 11:59:29
【问题描述】:

我在 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 必须在编译时指定大小。正如你可能猜到的,我做不到。 有解决方法吗?我将用户存储在 hast_table 中。例如,我可以为每个键存储不同大小的数组吗?

【问题讨论】:

  • 如果不玩那些可能会将您推回到vector 内存消耗领域的游戏,就无法做到这一点。您可以为所有人分配最大可能的大小,但这也是一种巨大的浪费。我认为,您将不得不做一些定制的事情。
  • std::array 的大小是其类型的一部分,因此您不能将不同大小的数组作为哈希表的一部分。你考虑过std::unique_ptr&lt;unsigned short[]&gt;吗?
  • 或您自己的类向量,但使用类似 短字符串优化 来避免短向量的堆分配。
  • @user4581301 你能给我一个提示,我可以在哪里开始搜索那个自定义类型。我没有想法
  • @vamirio-chan 您不搜索自定义类型,根据定义您自己编写。考虑一下您需要什么(开销较小的向量)并开始自己编写代码。

标签: c++ arrays caching memory hashmap


【解决方案1】:

没有。恐怕它不适用于不同的尺寸!

【讨论】:

  • 虽然这是真的,但提问者不能有不同大小的arrays,但会有变通办法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 2020-05-20
相关资源
最近更新 更多