C ++, как отправить указатель на объект функции (сортировать список указателей) - PullRequest
0 голосов
/ 02 июня 2018

Я использую

std::list<Employee*> Employees;

Сотрудник - это класс, поэтому моя задача состоит в том, что мне нужно отсортировать список, и для этого я должен определить оператор <, но я не знаю, как определить операторвзять объект Employee *, это мое определение </p>

bool operator <(const Employee *_employee) const { return (id < _employee->id); }

, но оно работает только для Employee < Employee*, но мне нужен оператор для работы с Employee* < Employee*

или если есть другое решение для сортировкиСписок хорошо поможет

1 Ответ

0 голосов
/ 02 июня 2018

Вам не нужно указывать operator<, а вы не можете, так как оба аргумента являются указателями (они рассматриваются как встроенный тип, и уже есть встроенныйoperator<, что язык не позволит вам изменить).

Вместо этого используйте перегрузку second std::list::sort с пользовательской функцией сравнения
(функция, не являющаяся членом сдва параметра):

bool employee_ptr_cmp(Employee const* lhs, Employee const* rhs) { ... }
...
Employees.sort(employee_ptr_cmp);

или лямбда-функция, определенная на месте:

Employees.sort([](Employee const* lhs, Employee const* rhs) { ... });

Вы должны понимать, что делает ваш код выше.Это позволяет сравнивать const Employee с Employee const*, в этом порядке.Они не оба указатели.Также предпочтительно перегрузить двоичные операторы как функции, не являющиеся членами .

...