Например: в файле заголовка C ++, если я определил struct Record
, и я хотел бы использовать ее для возможной сортировки, чтобы я хотел перегрузить оператор less
. Вот три способа, которые я заметил в разном коде. Я примерно заметил, что: если я собираюсь поместить Запись
в std :: set
, карту
, priority_queue
,… контейнеры , версия 2 работает (возможно, и версия 3); если я собираюсь сохранить запись
в вектор
, а затем вызвать 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;
}
По сути, я хотел бы задать здесь вопросы, чтобы посмотреть, сможет ли кто-нибудь дать краткое изложение, в чем разница между этими тремя методами и какие места подходят для каждой версии ?