用于C++(或C)的mmap可加载数据结构库

ken*_*ytm 9 c c++ serialization data-structures

我有一些大型数据结构(N> 10,000),通常只需要创建一次(在运行时),之后可以多次重复使用,但需要非常快速地加载.(它用于iPhoneOS上的用户输入处理.) - mmap一个文件似乎是最好的选择.

C++(或C)是否有任何数据结构库?沿线的东西

ReadOnlyHashTable<char, int> table ("filename.hash");
// mmap(...) inside the c'tor
...
int freq = table.get('a');
...
// munmap(...); inside the d'tor.
Run Code Online (Sandbox Code Playgroud)

谢谢!


细节:

我自己写了一个类似哈希表的类,但我觉得很难维护,所以我想看看是否已有解决方案.图书馆应该

  • 包含将数据结构序列化为文件的创建例程.这部分不需要很快.
  • 包含一个加载例程,该例程将文件映射为只能在O(1)处理步骤中使用的只读(或读写)数据结构.
  • 使用O(N)量的磁盘/内存空间和一个小的常数因子.(设备有严重的内存限制.)
  • 访问者的时间开销很小.(即复杂性未被修改.)

假设:

  • 数据的位表示(例如,字节序,编码float等)无关紧要,因为它仅在本地使用.
  • 到目前为止,我需要的可能的数据类型是整数,字符串和struct它们的数据.指针不会出现.

PS Can Boost.intrusive帮助?

小智 1

听起来也许可以使用“完美哈希”实用程序之一。这些花费一些时间优化特定数据的散列函数,因此不存在散列冲突并且(对于最小完美散列函数)使得散列表中不存在(或至少很少)空间隙。显然,这是为了很少生成但经常使用。

CMPH声称可以处理大量密钥。然而,我从未使用过它。

它很可能只生成哈希函数,让您使用它来生成数据结构。这应该不是特别难,但它可能仍然让您处于现在的位置 - 至少自己维护一些代码。