unordered_set <int> :: iterator it + n的时间复杂度是多少?

时间:2017-07-30 01:47:41

标签: c++ time-complexity

假设我有一个名为std::unordered_set<int>的{​​{1}},我想在myset时间内从myset返回一个随机数。我首先使用O(1)生成一个随机数:

rand()

然后,我这样做:

int n = rand() %  myset.size();

我想知道myset.begin() + n; myset.begin() + n中是否有O(n)

谢谢!

1 个答案:

答案 0 :(得分:6)

std::unordered_set<>::iterator(由myset.begin()生成)是Constant ForwardIteratorRef

ForwardIterator不同,RandomAccessIterator支持增量(++myIterator),但不支持随机增量。

因此,myset.begin() + n无法保证按标准编译。它没有编译here

您可以使用循环执行++递增n次,但当然,复杂度至少为O(n)。