Boost logo

Boost Users :

Subject: [Boost-users] Generically comparing structs
From: Bill Buklis (boostuser_at_[hidden])
Date: 2009-08-27 14:26:31


Frequently I have to write comparison functions (usually of the "less"
variety) that involve multiple keys or members of a struct. For example:

struct s
{
  A a;
  B b;
  C c;
  D d;
  // there may be other members not used in the comparison
};

// operator< function or an equivalent function object
bool operator<( const s& lhs, const s& rhs )
{
  if( lhs.a < rhs.a )
     return(true);
  else if( lhs.a == rhs.a )
  {
     if( lhs.b < rhs.b )
        return(true);
     else if( lhs.b == rhs.b )
//and so on...
  }
  return(false);
}

This gets quite repetitive, especially if I have to write alternate sort
orders (e.g. b,a,c,d or c,d,a,b)

I'm thinking there has to an easier way to do this or a way to do a generic
algorithm for this. Is there anything in boost that would help?

I had an idea that one might be able to fill a vector with binders for each
element and then call lexicographical_compare, but I'm not sure how to make
it work.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net