迭代std :: set / std :: map的时间复杂度是多少?

时间:2012-08-02 14:40:31

标签: c++ stl time-complexity big-o std

迭代std::set / std::multiset / std::map / std::multimap的时间复杂度是多少?我相信它在集合/地图的大小上是线性的,但不是那么肯定。是否在语言标准中指定了?

2 个答案:

答案 0 :(得分:39)

draft C++11 standard N3337中,答案可以在§24.2.1第8段中找到:

  

所有迭代器类别只需要那些函数   可以在固定时间内实现给定类别(摊销)。

由于迭代器上的每个操作必须是恒定时间,因此迭代n元素必须为O(n)

答案 1 :(得分:10)

  

我认为它在集合/地图的大小上是线性的,但不是这样   肯定的。

这是正确的。迭代整个集合或地图摊销 O(N)