Например: в файле заголовка С++, если я определил struct Record
, и я хотел бы использовать его для возможной сортировки, чтобы я хотел перегрузить less operator
. Вот три способа, которые я заметил в различном коде. Я грубо заметил, что: если я собираюсь положить Record
в контейнеры std::set
, map
, priority_queue
,..., то работает версия 2 (возможно, версия 3); если я собираюсь сохранить Record
в vector<Record> v
, а затем вызовет make_heap(v.begin(), v.end())
и т.д., тогда будет работать только версия 1.
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;
}
};
в том же заголовочном файле, например:
//version 3
inline bool operator <(const Record& lhs, const Record& rhs)
{
return lhs->num>rhs->num;
}
В принципе, я хотел бы задать здесь вопросы, чтобы узнать, может ли кто-нибудь придумать какие-то сведения о том, какие различия между этими тремя методами и каковы правильные места для каждой версии?