[英]Memory Allocation in std::map
我正在撰写有关各种C ++词典实现(地图,词典,向量等)的报告。
使用std :: map插入的结果说明性能为O(log n)。 性能上也有持续的峰值。 我不是100%知道是什么原因造成的; 我认为它们是由内存分配引起的,但是我一直没有找到任何文献/文档来证明这一点。
谁能解决这个问题或为我指明正确的方向?
干杯。
您是对的:这是O(log n)复杂度。 但这是由于map的排序性质(通常基于二叉树)。
另请参见http://www.sgi.com/tech/stl/UniqueSortedAssociativeContainer.html,其中有关于插入的说明。 最糟糕的情况是O(log n)和摊销O(1),如果您可以暗示在哪里进行插入。
映射通常基于二叉树,需要进行平衡以保持良好的性能。 您观察到的负载峰值可能与此平衡过程相对应
对于STL,经验方法并不是绝对必要的。 当标准明确规定了操作(例如std :: map插入)的最小复杂性时,没有任何实验意义。
我敦促您阅读该标准,以便在继续实验之前了解最小的复杂性保证。 当然,您碰巧要测试的任何STL实现中都可能存在错误。 但是流行的STL是经过充分调试的生物,并且用途非常广泛,因此我对此表示怀疑。
如果我没记错的话,std :: map是一棵平衡的红黑树。 当std :: map确定基础树需要平衡时,可能会导致某些峰值。 同样,在分配新节点时,OS可能会在分配部分造成一些峰值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.