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