如何实现与std :: map一起使用的自定义分配器?

时间:2014-12-30 08:32:54

标签: c++ c++11 stdmap qcustomplot

我正在寻找有关如何实现与std::map一起使用的自定义分配器的一些指示。我对填充数百万条目的地图感兴趣,而没有为容器中的每个元素分配(这是此容器的默认元素)。这样做的原因是将数据传递给使用地图来存储图表样本(QCustomPlot)的第三方库,并且我在绘制大型时间序列时感觉性能受到影响。

如果预先知道std::map的大小,是否可以通过一次分配执行此操作?

编辑: 节点将按升序输入容器。

1 个答案:

答案 0 :(得分:1)

在这种情况下,自定义分配器唯一可以做的就是避免由于对齐而导致的默认分配器使用的一些开销,如果你知道由于内部指针导致的std :: map的最终大小和开销,您可以保留一个所需大小的缓冲区,并在自定义分配器中使用所有连续内存。

这将节省的内存量取决于您在地图上使用的类型,我认为不会那么多。

正如ÖöTiib和dau_sama的评论所提到的,你最好的选择是boost :: flat_map,或者你可以通过

自定义
std::vector<std::pair<Key,Value>>

无论如何,如果你不能改变第三方的lib并且它只接受std :: map你仍然会运气不好,除非它接受你可以适应的某种类型的迭代器。