#include <boost/iterator/transform_iterator.hpp>
#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <iostream>
struct S
{
    int i;
    char *s;
    float f;
};

int main()
{
    S a[] = {{10, NULL, 2.1},
             {11, NULL, 0.1},
             {12, NULL, 1.1}};
    std::vector<S> v(a, a+3);
    std::cout << *std::min_element(
                    boost::make_transform_iterator(v.begin(), boost::bind(&S::f, _1)),
                    boost::make_transform_iterator(v.end(), boost::bind(&S::f, _1))
                  ) << '\n';
}
