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?
The boolean value denotes if index is found the set or not. The integer value contains the integer stored at index in the set. If the boolean value is set true, which indicates index to be a valid index, print the integer value stored in the pair.
You can't access set using index but the above method would provide an "index" i if you want to copy the elements from set into an array, provided you have created an array of sufficient size before hand.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With