Например: в заголовочном файле C ++, если я определил 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;
}
В основном, я хотел бы задать вопросы здесь, чтобы посмотреть, может ли кто-нибудь придумать какое-то резюме, в чем различия между этими тремя методами и каковы подходящие места для каждой версии?