迭代std::set
/ std::multiset
/ std::map
/ std::multimap
的时间复杂度是多少?我相信它在集合/地图的大小上是线性的,但不是那么肯定。是否在语言标准中指定了?
答案 0 :(得分:39)
在draft C++11 standard N3337中,答案可以在§24.2.1第8段中找到:
所有迭代器类别只需要那些函数 可以在固定时间内实现给定类别(摊销)。
由于迭代器上的每个操作必须是恒定时间,因此迭代n
元素必须为O(n)
。
答案 1 :(得分:10)
我认为它在集合/地图的大小上是线性的,但不是这样 肯定的。
这是正确的。迭代整个集合或地图摊销 O(N)