我喜欢使用STL开发算法,但是,我有这个反复出现的问题,我的数据集对于堆来说太大了.
我一直在寻找支持磁盘的STL容器和算法的直接替换,即存储在磁盘而不是堆上的数据结构.
一位朋友最近向我指出了stxxl.在我太介入之前......我应该考虑使用其他任何支持磁盘的STL替换吗?
注意:我对持久性或嵌入式数据库不感兴趣.请不要提及boost :: serialization,POST ++,Relational Template Library,Berkeley DB,sqlite等.我知道这些项目并在它们适合我的目的时使用它们.
更新:有几个人提到了内存映射文件和使用自定义分配器,BTW提出了很好的建议,但我想指出他们在这里讨论David Abraham建议磁盘支持的容器需要自定义迭代器.这意味着自定义分配器方法不太可行.
我已经实现了一些非常相似的东西.实现迭代器是最具挑战性的.我使用boost :: iterator_facade来实现迭代器.使用boost::iterator_facade
您可以轻松地调整磁盘数据结构上的任何缓存以具有STL容器接口.
我从来没有做过这样的事情,但是有可能通过编写一个利用内存映射文件来备份数据的自定义分配器来做你想做的事情.
请参阅boost :: interprocesses for docs关于它们易于使用的内存映射文件的实现,这篇Dr. Dobbs文章详细讨论了编写分配器,以及这个IEEE Software专栏,用于描述问题和示例代码.