I have a list of X,Y,Goodness values. I want to randomly select one entry from the top Goodness entries with some leeway for what 'top goodness' is.
// Now sort the list by goodness, largest goodness at front.
fits.sort(compare_PlacementRule_goodness);
// Keep entries within a certain closeness to the maximm value.
BuildingRect::xyPairGoodness & pg = fits.front();
float topval = pg.goodness - r->m_placementRuleAllowance;
// If topval is negative then no elements will get cut out.
if(topval > 0.0f)
{
for(std::list<BuildingRect::xyPairGoodness>::iterator it = fits.begin(); it != fits.end(); ++it)
{
float g = it->goodness;
if(g < topval)
{
// Cut rest of list off.
fits.erase(it, fits.end());
break;
}
}
}
and the compare is
bool compare_PlacementRule_goodness(BuildingRect::xyPairGoodness first, BuildingRect::xyPairGoodness second)
{
// We want the highest positive goodness at the top of the list.
if (first.goodness > second.goodness)
{
return true;
}
else
{
return false;
}
}
And as usual the greater than and less than symbols get munged.
TF