假设我有一个名为std::unordered_set<int>
的{{1}},我想在myset
时间内从myset
返回一个随机数。我首先使用O(1)
生成一个随机数:
rand()
然后,我这样做:
int n = rand() % myset.size();
我想知道myset.begin() + n;
或myset.begin() + n
中是否有O(n)
?
谢谢!
答案 0 :(得分:6)
std::unordered_set<>::iterator
(由myset.begin()
生成)是Constant ForwardIterator
。 Ref
与ForwardIterator不同,RandomAccessIterator支持增量(++myIterator
),但不支持随机增量。
因此,myset.begin() + n
无法保证按标准编译。它没有编译here。
您可以使用循环执行++
递增n
次,但当然,复杂度至少为O(n)。