我想知道C++中的STL map
是否拥有连续的内存空间,还是分配在堆上?
我想知道C++中的STL map
是否拥有连续的内存空间,还是分配在堆上?
由于map
是一个动态容器,它的元素内存是动态分配的(这取决于可配置的分配器!)。
此外,map
是一个基于节点的容器,因此每个元素都进入不同的、单独的分配(以便允许最大的迭代器和引用非失效)。元素几乎肯定是不连续的,可能散布在反映添加方式的方式上。
实际上,为了实现对数级别的查找、插入和删除时间,map将被实现为某种平衡树。
(如果您需要具有连续存储和对数查找时间的数据结构,请考虑使用排序向量。)
stack_allocator
相邻,后者以内存缓冲区作为输入进行分配,但它们可能不会按照内存中的排序顺序排列。 - Xeo这很可能是与实现相关的问题,您可以更改任何STL容器的分配器,但这并不适合新手,您需要查看使用的标准库文档。
无论如何,map通常被实现为红黑树,而树节点位于堆上。
(如果我理解正确)树节点包含value_type的实例,这些实例是您的映射的键/值对。
请注意,对于任何容器来说,堆栈都不是一个好的存储想法,因为堆栈应该被视为一种稀缺资源。