Hello Boost users,
I'm working on my thesis with the Boost library (Boost-1.34.1) running on g++ (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2).
What I'm trying to do can be done very simply, but I preferred to do it more appropriately, I believe, using the Boost Min-Max library. I'm trying to simultaneously obtain the maximum and minimum values of a member function call over a lists of objects.
Suppose there exists a
class utl::Particle;
with a member function
double GetEnergy() const;
In a member field of another class I have a list of those particles
std::list<utl::Particle> particles;
for which I want min/max GetEnergy() values.
How is that accomplished using Boost.Min-Max?
Below I give some excerpts of some of the things I've tried, but didn't work. In order to try to understand what I was doing I split the code over several lines, so to minimize the non-compiling one. In both cases the error seems to be (that line is what I believe to be the most important part of all the error messages):
boost/iterator/iterator_adaptor.hpp:353: error: no match for 'operator-' in...
First attempt:
boost::function<double(const utl::Particle&)> energy = boost::lambda::bind(&utl::Particle::GetEnergy, boost::lambda::_1 );
boost::transform_iterator< boost::function<double(const utl::Particle&)> , list<utl::Particle>::const_iterator>
itBeg(particles.begin(), energy),itEnd(particles.end(), energy);
boost::minmax(itBeg, itEnd); // This call doesn't compile.
Second attempt:
boost::function<double(const utl::Particle&)> energy = boost::lambda::bind(&utl::Particle::GetEnergy, boost::lambda::_1 ); // As in the first case.
boost::minmax(
boost::make_transform_iterator(particles.begin(),energy ),
boost::make_transform_iterator(particles.end() ,energy )); // This call doesn't compile.
Thanks a lot for your help.
--
Rodolfo Federico Gamarra