我想知道c ++中的STL map
是否有连续的内存 - 还是分配给堆的内存?
答案 0 :(得分:9)
由于map
是动态容器,其元素的内存是动态分配(无论这意味着什么(它取决于可配置的分配器)!)
此外,map
是基于节点的容器,因此每个元素都进入一个独立的,单独的分配(以便允许最大迭代器和引用非失效)。元素几乎肯定在内存中不连续,并且可能以反映你如何添加元素的方式分散。
实际上,地图将被实现为某种类型的平衡树,以实现对数查找,插入和删除时间。
(如果您想要一个具有连续存储和对数查找时间的数据结构,请考虑一个已排序的向量。)
答案 1 :(得分:1)
这很可能是特定于实现的,而且ou can certainly change the allocator of any STL container,但这不适合胆小的人,你需要查看你正在使用的标准库的文档。
无论如何,map通常实现为red-black tree,并且树节点在堆上。
(树节点,如果我理解正确,包含instances of value_type,它们是地图的键/值对。)
请注意,堆栈对于任何容器都是一个糟糕的存储理念,因为堆栈应该被视为稀缺资源。