--- At Fri, 26 Mar 2004 00:48:49 +0100, Daniel Wallin wrote:
Chris Jurney wrote:
I've had this same pattern come up 4 or 5 times now, and each time I've been unable to find a stl + boost solution that allowed me to do what I want without writing my own less function. Basically, I want something that will let me do a sort, or define a map on structs or pairs without writing a less that compares the member variable or .first. <snip> No such luck. It looks like I can do operator * and & on lambda objects, but not access members through them. Is there anything in boost, stl, or elsewhere that lets me not write this:
class myLess
{
bool operator() (pair
a, pair b) {return a.first < b.first;}
}
Yes:
struct X { int a; };
std::vector<X> v;
With boost.bind:
std::sort( v.begin() , v.end() , boost::bind( std::less<int>() , boost::bind(&X::a, _1) , boost::bind(&X::a, _2) ) );
I don't know lambda, so I won't comment on that. But, I thought that the first parameter to bind was a function pointer? You can bind to an address? Please explain how this works?
and with boost.lambda:
std::sort( v.begin() , v.end() , bind(&X::a, _1) < bind(&X::a, _2) );
...Duane