Element at index in a std::set?

It doesn't cause a crash, it just doesn't compile. set doesn't have access by index.

You can get the nth element like this:

std::set<int>::iterator it = my_set.begin();
std::advance(it, n);
int x = *it;

Assuming my_set.size() > n, of course. You should be aware that this operation takes time approximately proportional to n. In C++11 there's a nicer way of writing it:

int x = *std::next(my_set.begin(), n);

Again, you have to know that n is in bounds first.


A usual implementation of std::set is to use binary search trees, notably self-balancing binary search trees such as red-black trees

They don't give you constant time access to the n-th element. However, you seems to want the first. So try in C++11:

auto it = my_set.begin();
int first=0;
if (it != my_set.end()) first = *it;

Tags:

C++

Set

Std