将特殊purpoes-strings转换为Integers的方法

我需要一个Key-Value对的内存数据结构(400 MB的数据)。 我对键有以下约束:

  1. 键和值都是分别为256和1024的文本字符串。
  2. 任何键通常看起来像k1k2k3k4k5,每个k(i)本身是4-8字节的字符串。 一些k(i)可能存在或可能不存在于键中。
  3. 每个k(i)有6-8种可能性。 然而,k3和k4有256000种可能性。
  4. 可以使用prefix_key迭代DS。 DS应针对此操作进行优化。 该操作分配迭代器,即它迭代整个DS并返回与prefix_key匹配的键值列表(例如,“k1k2k3。*”,k(i)如上定义)。 每次迭代都迭代这个迭代器(列表)。 释放迭代器可以释放列表。

使用DS获取字符串键会使密钥比较过于昂贵。 因此排除了DS(Hash,B + Tree)的某些选项。

我的问题是我们如何创造性地将String键转换为整数键?解决方案需要具有以下属性:

对于关键模式“k1k2k3。*”,它应该对整数的上限和下限进行生成,以便基于这些边界,在DS中只查找少数条目。

我在解决这个问题的背景下问这个问题

每个k(i)有6-8种可能性。 然而,k3和k4有256000种可能性。

如果你可以在k1 k2 k3 k4 k5中拆分键,你可以这样编码:

3 bits for k1 3 bits for k2 18 bits for k3 18 bits for k4 3 bits for k5 

这使得45位。 所以你可以将你的键归结为0到2 ^ 45-1之间的整数。 如果你只使用k3和k4的一些可能值,这种接缝会很多。

因此,我将k1 k2的6位用于精确映射到索引,而不是取决于k3 k4的密集程度,k3和k4的某种树结构,以及再次精确映射到k5的索引。