我正在寻找一些关于如何实现与std::map
. 我有兴趣在没有为容器中的每个元素分配的情况下填充具有数百万个条目的地图(这是该容器的默认设置)。这样做的原因是将数据传递给使用地图存储图表样本(QCustomPlot)的第三方库,并且在绘制大型时间序列时我感到性能受到影响。
std::map
如果事先知道的大小,是否可以通过一次分配来做到这一点?
编辑:节点将按升序输入容器。
我正在寻找一些关于如何实现与std::map
. 我有兴趣在没有为容器中的每个元素分配的情况下填充具有数百万个条目的地图(这是该容器的默认设置)。这样做的原因是将数据传递给使用地图存储图表样本(QCustomPlot)的第三方库,并且在绘制大型时间序列时我感到性能受到影响。
std::map
如果事先知道的大小,是否可以通过一次分配来做到这一点?
编辑:节点将按升序输入容器。
在这种情况下,自定义分配器唯一可以做的就是避免由对齐引起的默认分配器使用的一些开销,如果您知道 std::map 由于内部指针而导致的最终大小和开销,您可以保留所需大小的缓冲区,并在自定义分配器中使用所有连续内存。
这将节省的内存量取决于您在地图上使用的类型,我认为不会那么多。
正如 Öö Tiib 和 dau_sama 的评论所述,您最好的选择是 boost::flat_map,或者您可以通过
std::vector<std::pair<Key,Value>>
无论如何,如果您无法更改 3rd 方库并且它只接受 std::map ,除非它接受某种类型的迭代器,否则您仍然会不走运。