C++ 为什么std::map::emplace#u hint';s的时间复杂度是常数,提供正确的提示

C++ 为什么std::map::emplace#u hint';s的时间复杂度是常数,提供正确的提示,c++,stl,C++,Stl,从参考文献中可以看出,is的复杂性: 如果我们提供一个好的提示,为什么它是常量?std::map是一棵红黑树,为了在std::map中插入/放置新元素,我们需要: 找到插入/安放新元素的正确位置-O(lgN) 重新聚集和旋转节点以保持红黑树属性。-O(1) 如果提供了一个好的提示,那么搜索部分(#1)已经完成,对于#2有,每个都是O(1) 因此,有了适当的提示,std::map::emplace\u hint就是O(1)您试图制作文档吗?挑剔:std::map并没有指定为红黑树,尽管这是一个常见

从参考文献中可以看出,is的复杂性:


如果我们提供一个好的提示,为什么它是常量?

std::map
是一棵红黑树,为了在
std::map
中插入/放置新元素,我们需要:

  • 找到插入/安放新元素的正确位置-O(lgN)
  • 重新聚集和旋转节点以保持红黑树属性。-O(1)
  • 如果提供了一个好的提示,那么搜索部分(#1)已经完成,对于#2有,每个都是O(1)


    因此,有了适当的提示,
    std::map::emplace\u hint
    就是O(1)

    您试图制作文档吗?挑剔:
    std::map
    并没有指定为红黑树,尽管这是一个常见的实现。
    Complexity
    Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before hint.