#include <iostream>
#include <set>
#include <cstdlib>
#include <ctime>
using namespace std;
class ElementHouse {
set<int> nums;
public:
ElementHouse() { srand( time(0) ); }
void InsertElement(int i) { nums.insert(i); }
void RemoveElement(int i) { nums.erase(i); }
int GetRandomElement() {
int sz = static_cast<int>( nums.size() );
set<int>::iterator it = nums.begin();
if( it != nums.end() ) {
const int dist = rand() % sz;
advance( it, dist );
return *it;
}
// Exception handling (throw or something)
return 0;
}
};
int main() {
ElementHouse e;
cout << e.GetRandomElement() << endl;
cout << "Inserting 2" << endl;
e.InsertElement(2);
cout << e.GetRandomElement() << endl
<< e.GetRandomElement() << endl;
cout << "Inserting more numbers(2, 12, 32)" << endl;
e.InsertElement(2);
e.InsertElement(12);
e.InsertElement(32);
cout << e.GetRandomElement() << endl
<< e.GetRandomElement() << endl;
cout << "Deleting 2" << endl;
e.RemoveElement(2);
cout << e.GetRandomElement() << endl
<< e.GetRandomElement() << endl;
cout << "Retrying to delete 2" << endl;
e.RemoveElement(2);
cout << "Returning" << endl;
return 0;
}