Перегрузка оператора C ++ less, какой способ использовать?

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

По сути, я хотел бы задать здесь вопросы, чтобы посмотреть, сможет ли кто-нибудь дать краткое изложение, в чем разница между этими тремя методами и какие места подходят для каждой версии ?

18
задан Étienne 7 June 2015 в 17:44
поделиться