Get element from arbitrary index in set
myset.begin() + 5;
only works for random access iterators, which the iterators from std::set
are not.
For input iterators, there's the function std::advance
:
set<int>::iterator it = myset.begin();
std::advance(it, 5); // now it is advanced by five
In C++11, there's also std::next
which is similar but doesn't change its argument:
auto it = std::next(myset.begin(), 5);
std::next
requires a forward iterator. But since std::set<int>::iterator
is a bidirectional iterator, both advance
and next
will work.