関数オブジェクトrandomElementByWeightコンストラクターは、ループの反復ごとに呼び出されますか、それともコンパイラーはこれを何らかの方法で最適化できますか?rand関数が反復ごとに呼び出されることを確認したいので、関数オブジェクトコンストラクターにそれを含める方が良いと思います。
struct randomElementByWeight
{
double randomNumber;
randomElementByWeight() : randomNumber(rand() / static_cast<double>(RAND_MAX)) {}
bool operator()(const Element& e)
{
if ( (randomNumber -= e.weight) <= 0.0 )
{
return true;
}
return false;
}
};
...
for (int i = 0; i < 3; ++i)
{
iter = find_if(routes.begin(), routes.end(), randomElementByWeight());
}