2

I am using

std::list<Employee*> Employees;

Employee is a class so my proplem is that i need to sort list, and for doing that i must define operator < but i don't know how to define the operator to take Employee* object this is my define

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

but its work only for Employee < Employee* but i need the operator to work on Employee* < Employee*

or if there anther solution for sorting the list well help

1 Answers1

4

You don't need to provide operator<, and you can't, with both arguments being pointers (they are considered as a built-in type, and there already is a built-in operator< that the language won't let you change).

Use the second std::list::sort overload instead, with a custom comparison function
(a non-member function with two parameters):

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

or a lambda function defined in-place:

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

You should understand what your code above does. It allows you to compare const Employee with Employee const*, in this order. They're not both pointers. It is also preferred to overload binary operators as non-member functions.

LogicStuff
  • 19,397
  • 6
  • 54
  • 74