繁体   English   中英

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

[英]How to implement a custom allocator to be used with std::map?

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

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

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

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

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

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

std::vector<std::pair<Key,Value>>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM