Element at index in a std::set?

c++, set, std

Solution

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.

Problem

I've stumbled upon this problem: I can't seem to select the item at the index' position in a normal `std::set`. Is this a bug in STD? Below a simple example: ``` #include <iostream> #include <set> int main() { std::set<int> my_set; my_set.insert(0x4A); my_set.insert(0x4F); my_set.insert(0x4B); my_set.insert(0x45); for (std::set<int>::iterator it=my_set.begin(); it!=my_set.end(); ++it) std::cout << ' ' << char(*it); // ups the ordering //int x = my_set[0]; // this causes a crash! } ``` Anything I can do to fix the issue?

Original source

Related problems