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ã