Using boost::random to select from an std::list where elements are being removed
Posted
by user144182
on Stack Overflow
See other posts from Stack Overflow
or by user144182
Published on 2010-05-20T13:36:31Z
Indexed on
2010/05/20
14:00 UTC
Read the original article
Hit count: 207
See this related question on more generic use of the Boost Random library.
My questions involves selecting a random element from an std::list
, doing some operation, which could potentally include removing the element from the list, and then choosing another random element, until some condition is satisfied.
The boost code and for loop look roughly like this:
// create and insert elements into list
std::list<MyClass> myList;
//[...]
// select uniformly from list indices
boost::uniform_int<> indices( 0, myList.size()-1 );
boost::variate_generator< boost::mt19937, boost::uniform_int<> >
selectIndex(boost::mt19937(), indices);
for( int i = 0; i <= maxOperations; ++i ) {
int index = selectIndex();
MyClass & mc = myList.begin() + index;
// do operations with mc, potentially removing it from myList
//[...]
}
My problem is as soon as the operations that are performed on an element result in the removal of an element, the variate_generator has the potential to select an invalid index in the list. I don't think it makes sense to completely recreate the variate_generator each time, especially if I seed it with time(0).
© Stack Overflow or respective owner