For example: in a C++ header file, if I defined a struct Record
and I would like to use it for possible sorting so that I want to overload the less operator
. Here are three ways I noticed in various code. I roughly noticed that: if I'm going to put Record
into a std::set
, map
, priority_queue
, … containers, the version 2 works (probably version 3 as well); if I'm going to save Record
into a vector<Record> v
and then call make_heap(v.begin(), v.end())
etc.. then only version 1 works.
struct Record { char c; int num; //version 1 bool operator <(const Record& rhs) { return this->num>rhs.num; } //version 2 friend bool operator <(const Record& lhs, const Record& rhs) //friend claim has to be here { return lhs->num>rhs->num; } };
in the same header file for example:
//version 3 inline bool operator <(const Record& lhs, const Record& rhs) { return lhs->num>rhs->num; }
Basically, I would like to throw the questions here to see if someone could come up with some summary what's the differences among these three methods and what are the right places for each version?