Na przykład: w pliku nagłówkowym C++, jeśli zdefiniowałem struct Record
i chciałbym go użyć do ewentualnego sortowania, tak że chcę przeciążać less operator
. Oto trzy sposoby, które zauważyłem w różnych kodach. Z grubsza zauważyłem, że: jeśli mam zamiar wstawić Record
do kontenerów std::set
, map
, priority_queue
, ..., wersja 2 działa (prawdopodobnie także wersja 3); jeśli zamierzam zapisać Record
w vector<Record> v
, a następnie zadzwonić pod numer make_heap(v.begin(), v.end())
... wtedy działa tylko wersja 1.C++ mniej przeciążenia operatora, jaki sposób użyć?
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;
}
};
w tym samym pliku nagłówka na przykład:
//version 3
inline bool operator <(const Record& lhs, const Record& rhs)
{
return lhs->num>rhs->num;
}
Zasadniczo chciałbym rzucać pytania tutaj, aby zobaczyć, czy ktoś mógłby wymyślić jakiegoś podsumowania, co się różnice między tymi trzema metodami i jakie są właściwe miejsca dla każdej wersji?
Poprawa zaakceptować ocenę. –
Czy możesz przesłać kompletne przykładowe programy dla każdego przypadku, który nie działa –
Nie widzę wersji3 –