我正在尝试实现一个我将拥有键值结构对的系统。它们需要以某种线性方式保持(也就是说,它们可以被索引),一旦给定位置不能移动,所以插入只能附加(并且实际上不能进行多次排序)。举个例子,这就是我的想法:
Data list:
0: { "somekey", somevalue }
1: { "someotherkey", someothervalue }
...
n: { "justanotherkey", justanothervalue }
我设计了这样的系统,以便在搜索密钥时,可以缓存索引,然后以恒定时间访问。现在,由于我无法预测数据的顺序或数量,而且我无法对其进行排序,我需要关于算法或数据结构的想法,这些想法不仅仅是线性搜索,而且仍然保留约束I'我喜欢。
有人有任何想法吗?我怀疑我能加快速度,但每一点点都有帮助,因为这将成为我系统的核心。提前谢谢!
== EDIT ==
使用两个单独的结构(如哈希表和动态数组)的想法实际上是我的第一个意图。不幸的是,这对我不起作用,因为我无法分离关键和价值。密钥将用于错误和消息,因此即使缓存了索引,仍然需要访问原始密钥。基本上它们必须只是一个数组结构,例如:
struct Entry {
/* Key is actually a complex struct itself with string, and params */
Key key;
Data* data;
}
答案 0 :(得分:4)
哈希表键怎么样 - >数组中的索引?
答案 1 :(得分:2)
一种选择是使用散列表和动态数组的组合。这个想法如下 - 每当您将一个元素插入到数据结构中时,您将它附加到动态数组,然后将该键插入到与索引相关联的哈希表中,该表将存在于键/值对所在的动态数组中。这样,要通过索引查找,您可以查看动态数组,并按名称查找,在哈希表中查找索引,然后在该索引处查询。这需要预期的O(1)时间进行插入,删除和访问,这比线性搜索要快得多。
希望这有帮助!