外部存储器数据结构,以替换地图的矢量

External memory data structure to replace vector of maps

本文关键字:地图 替换 存储器 数据结构 外部      更新时间:2023-10-16

我正在对流网络进行迭代计算,在此期间我需要记录每个源对每个边上的流的贡献程度。 任何一个边上的流量平均来自 2% 的源,所以我定义了 vector< map<int, double> > flow ,其中flow[e][s] = f表示由于源s在边e上的流动是f 。 在每次迭代中,flow中的每个f都会更新。

该程序的峰值内存使用量接近 4 GB。 这适用于(32位)Linux和OS X,但它在Windows上崩溃(似乎每个进程施加了2 GB的限制)。

如何使用vector< map<int, double> >接口实现基于磁盘的数据结构(或以其他方式解决此问题)?

我已经将STXXL用于类似的类型场景。可能值得研究。

如果映射的向量是消耗所有内存的,那么是否绝对有必要为数据字段提供double?改变可能会有所帮助。

否则,您可能能够使用内存映射,尽管使其跨平台兼容将是一项艰巨的工作,尤其是对于用于映射的嵌入式数据结构。