c ++ menos sobrecarga de operador, que maneira de usar?

Por exemplo: em um arquivo de cabeçalho C ++, se eu definisse umstruct Record e gostaria de usá-lo para uma possível classificação, de modo que eu queira sobrecarregar oless operator. Aqui estão três maneiras que notei em vários códigos. Notei mais ou menos isso: se eu vou colocarRecord dentro destd::set, map, priority_queue,… Containers, a versão 2 funciona (provavelmente também a versão 3); se eu vou salvarRecord dentro devector<Record> v e depois chamemake_heap(v.begin(), v.end()) etc .. então somente a versão 1. funcion

  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;
      }
  };

no mesmo arquivo de cabeçalho, por exemplo:

      //version 3
      inline bool operator <(const Record& lhs, const Record& rhs)
      {
         return lhs->num>rhs->num;
      }

Basicamente, eu gostaria de fazer as perguntas aqui para ver se alguém poderia apresentar algum resumo, quais são as diferenças entre esses três métodos e quais são os lugares certos para cada versã

questionAnswers(3)

yourAnswerToTheQuestion