【发布时间】:2019-12-12 23:53:28
【问题描述】:
假设我想在 C++ 中存储一个键值。让我们进一步假设我有 1,000,000 个唯一键,它们仅映射到 100 个值,但每个键都有这 100 个值之一。
在 C++ 中是否有一种有效的方法来利用多次存在的许多值来压缩此查找表?
在我的脑海中,它归结为布尔逻辑最小化......但看看是否存在 C++ 的任何库或数据结构会很有趣。
【问题讨论】:
-
如果所有键在数字上都是连续的,或者它们是否无处不在,答案将大不相同。
-
你会如何压缩它(通常,某些特殊情况可能存在)。您仍然需要存储所有键以及描述哪些值与键关联的内容,此外,您需要存储与
map相关的所有膨胀。如果值类型非常大,您可以实现的唯一压缩是用索引替换值。这样可以避免不必要的值类型副本。 -
这里的目标是什么?您要执行哪些操作?插入很多东西然后遍历所有值?查找很多值?混合插入和查找?在一般情况下,@Qubit 所说的不多 - 你可以存储例如指向您在地图中的值的指针,但
std::map仍然有大量开销 - 但如果您只需要执行非常具体的操作,也许有一个很好的解决方案。
标签: c++ compression key-value stdmap