[英]mmap-loadable data structure library for C++ (or C)
我有一些大型数据结构(N> 10,000),通常只需要创建一次(在运行时),之后可以多次重复使用,但需要非常快速地加载。 (它用于iPhoneOS上的用户输入处理。) mmap
-ing文件似乎是最好的选择。
C ++(或C)是否有任何数据结构库? 沿线的东西
ReadOnlyHashTable<char, int> table ("filename.hash");
// mmap(...) inside the c'tor
...
int freq = table.get('a');
...
// munmap(...); inside the d'tor.
谢谢!
我自己写了一个类似哈希表的类,但我觉得很难维护,所以我想看看是否已有解决方案。 图书馆应该
假设:
float
编码等)无关紧要,因为它仅在本地使用。 struct
。 指针不会出现。 PS Can Boost.intrusive帮助?
您可以尝试创建内存映射文件,然后使用客户分配器创建STL映射结构。 然后,您的客户分配器只需占用内存映射文件的内存的开头,然后根据请求的大小递增其指针。 最后,所有分配的内存应该在内存映射文件的内存中,并且应该可以在以后重新加载。
您必须检查STL映射是否释放了内存。 如果是,您的客户分配器将丢失内存映射文件的一些内存,但如果这是有限的,您可以使用它。
听起来也许你可以使用的“完美哈希”的公用事业公司之一在那里。 这些花费一些时间来优化特定数据的散列函数,因此没有散列冲突和(对于最小的完美散列函数),因此散列表中没有(或至少很少)空间隙。 显然,这是为了很少生成,但经常使用。
CMPH声称应对大量的钥匙。 但是,我从未使用它。
它很有可能只生成哈希函数,让您使用它来生成数据结构。 这应该不是特别难,但它可能仍然让你离开现在的位置 - 至少保留一些代码本身。
GVDB(GVariant数据库),Dconf的核心就是这个。
见git.gnome.org/browse/gvdb ,dconf和bv
和developer.gnome.org/glib/2.30/glib-GVariant.html
刚想到另一种选择 - Datadraw 。 同样,我没有使用过这个,所以没有保证,但它确实声称是一个快速持久的数据库代码生成器。
WRT boos.intrusive,我刚看了一眼。 这真有趣。 而且很烦人,因为它使我自己的一个库看起来有点无意义。
我认为这部分看起来特别相关。
如果你可以使用“智能指针”作为链接,大概可以使用一个简单的从基地址偏移的整数来实现智能指针类型(我认为这是示例的重点)。 数组下标可能同样有效。
肯定有无序的set / multiset支持(哈希表的C ++代码)。
使用cmph会起作用。 它确实具有哈希函数本身的序列化机制,但是如果你的查询集宇宙在手头不知道的话,你还需要序列化密钥和数据,除了在它上面添加一层冲突解决方案。 如果您事先知道所有键,那么这是一种方法,因为您不需要存储键并且将节省大量空间。 如果没有,对于这么小的一套,我会说它太过分了。
可能最好的选择是使用谷歌的sparse_hash_map。 它具有非常低的开销,并且还具有您需要的序列化挂钩。
http://google-sparsehash.googlecode.com/svn/trunk/doc/sparse_hash_map.html#io
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.