我正在实现一个数据结构,X-fast trie,其中需要几个哈希映射。为了存储组成trie的级别搜索结构的地图,我使用了许多std::vector
s和一个完美的哈希算法,如下所示:
struct node_value
{
// One out-edge.
...
};
typedef std::array<node_value, 2> node; // Two out-edges for each node.
typedef std::array<std::vector<node>, 32> level_search_structure; // One vector for each level.
在这种情况下,密钥为uint32_t
。要使用的向量索引由散列算法确定。
我有点担心记忆的局部性。如果矢量的内容是连续分配的,那么空间局部性会得到改善,或者我相信。我的问题是,实现这一目标的好方法是什么?我正在考虑用C风格的数组包装器替换向量,其内存将由一个单独的对象管理。每个包装器都会从分配的缓冲区中获取一个起始索引和一个长度,如下所示:
std::unique_ptr<node[]> array_ptr(new node[...]);
// In case the first three levels required space for 1, 2, and 4 nodes respectively:
array_wrapper lss_1(array_ptr.get(), 0, 1); // Starts from array_ptr's index 0, capacity of 1
array_wrapper lss_2(array_ptr.get(), 1, 2); // Starts from index 1, capacity of 2
array_wrapper lss_3(array_ptr.get(), 3, 4); // Starts from index 3, capacity of 4
...
有更好的选择吗?