c++ - How can I use Boost.Bind on compound types? -


i have std::map<int, std::pair<short, float> >, , need find minimal short in map. how can use boost::bind std::min_element() this?

boost::lambda?

the map iterator give pair first int key , second map's pair value, if had iterator it, you'd want minimum of it->second.first values. min_element function expects comparison function third argument, need build comparison function projects second.first of 2 arguments.

we'll start typedefs make code more readable:

typedef std::pair<short, float> val_type; typedef std::map<int, val_type> map_type; map_type m; 

we're going use boost.lambda overloaded operators, allowing use operator<. boost.bind can bind member variables member functions, we'll take advantage of that, too.

#include <boost/bind.hpp> #include <boost/lambda/lambda.hpp> using boost::bind;  // comparison (_1.second.first < _2.second.first) std::cout <<   std::min_element(m.begin(), m.end(),     bind(&val_type::first, bind(&map_type::iterator::value_type::second, _1))     <     bind(&val_type::first, bind(&map_type::iterator::value_type::second, _2))   )->second.first; 

that work boost::lambda::bind.


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -