c ++如何将对象指针发送到函数(指针列表排序)
c++ how to send object pointer to function (sort list of pointers )
我正在使用
std::list<Employee*> Employees;
员工是 class
所以我的问题是我需要对列表进行排序,为此我必须定义 operator <
但我不知道如何定义运算符来获取 Employee* 对象
这是我的定义
bool operator <(const Employee *_employee) const { return (id < _employee->id); }
但它只适用于 Employee < Employee*
但我需要操作员在 Employee* < Employee*
上工作
或者如果有其他排序列表的解决方案很好帮助
你不需要提供operator<
和you can't, with both arguments being pointers(它们被认为是内置类型,并且已经有一个内置的operator<
语言不会让你改变)。
改为使用 second std::list::sort
overload,使用自定义比较函数
(具有两个参数的非成员函数):
bool employee_ptr_cmp(Employee const* lhs, Employee const* rhs) { ... }
...
Employees.sort(employee_ptr_cmp);
或就地定义的 lambda 函数:
Employees.sort([](Employee const* lhs, Employee const* rhs) { ... });
你应该明白你上面的代码做了什么。它允许您按此顺序比较 const Employee
和 Employee const*
。它们不是两个指针。也优于overload binary operators as non-member functions.
我正在使用
std::list<Employee*> Employees;
员工是 class 所以我的问题是我需要对列表进行排序,为此我必须定义 operator < 但我不知道如何定义运算符来获取 Employee* 对象 这是我的定义
bool operator <(const Employee *_employee) const { return (id < _employee->id); }
但它只适用于 Employee < Employee*
但我需要操作员在 Employee* < Employee*
或者如果有其他排序列表的解决方案很好帮助
你不需要提供operator<
和you can't, with both arguments being pointers(它们被认为是内置类型,并且已经有一个内置的operator<
语言不会让你改变)。
改为使用 second std::list::sort
overload,使用自定义比较函数
(具有两个参数的非成员函数):
bool employee_ptr_cmp(Employee const* lhs, Employee const* rhs) { ... }
...
Employees.sort(employee_ptr_cmp);
或就地定义的 lambda 函数:
Employees.sort([](Employee const* lhs, Employee const* rhs) { ... });
你应该明白你上面的代码做了什么。它允许您按此顺序比较 const Employee
和 Employee const*
。它们不是两个指针。也优于overload binary operators as non-member functions.