I’m a bit confused about using STL set::find() for a set of my own defined class objects.
My class contains more than two items (3/4/5 etc.), so how can I overload less operator?
I tried for 3 variable, which is as follows and working fine:
return( (a1.i < a2.i) ||
(!(a1.i > a2.i) && (a1.f < a2.f)) ||
(!(a1.i > a2.i) && !(a1.f > a2.f) && (a1.c < a2.c)));
where, a1, and a2 are class objects and (i, f and c are class members).
Now I want to generalize this for n members, but my find() does not always work.
I’ve been looking through STL’s detailed documentation, trying to learn how set::find() is implemented, and why it needs less (<) operator overloading.
I referred to sgi and msdn documentation, but I could not find much about implementation details of set::find() there, either.
What am I doing wrong in my set::find() implementation?
You have to define a strict ordering of your objects. So if your object is made up of
nmembersa_1..a_nwhich all have a strict ordering themselves, what you can do is:Edit:
If either boost or C++11 is an option for you, you should really go with the
std::tie/boost::tiemethod Luc Danton suggests in his answer. It’s much cleaner.