当前,我可以将值输入QList并显示所有值,但希望将相同的工作程序类型分组在一起。 例如,所有小时工在一起,所有薪水工人在一起,与佣金工人相同。
当前的迭代器代码:
EmployeeList::iterator i;
for (i = EmpList.begin(); i != EmpList.end(); ++i)
{
cout << "Employee ID: " << (*i)->getID() << endl;
cout << "Name: " << (*i)->getName() << endl;
cout << "Type: " << (*i)->getPayment()->getType() << endl;
cout << "Amount: " << (*i)->getPayment()->pay()<< endl;
}
答案 0 :(得分:3)
如果您可以访问C ++ 14或C ++ 17,则可以:
std::sort(EmpList.begin(), EmpList.end(),
[](const auto& lhs, const auto& rhs) {
return lhs->getPayment()->getType() < rhs->getPayment()->getType();
});
应该做您所需要的。
如果您使用的是C ++ 11,则:
std::sort(EmpList.begin(), EmpList.end(),
[](const WhateverTypeIsInEmployeeList& lhs, const WhateverTypeIsInEmployeeList& rhs) {
return lhs->getPayment()->getType() < rhs->getPayment()->getType();
});
应该做这项工作。
对于C ++ 98/03,您需要编写一个函数/类来代替lambda。
(顺便说一句,我假设getPayment()->getType()
返回的类型具有operator<
,它满足std::sort
起作用所需的严格弱排序要求)
答案 1 :(得分:-1)
这无关紧要,问题已经解决,但是您不需要取消引用指针,箭头操作符会为您
//dont do this v
(*i)->getName();
//you can just do this
i->getName();
它不是必需的,但是您做的方式看起来很丑。如果您真的想成为超级“合适人”,则可以
(*i).getName();
但无论如何还是坚持使用箭头运算符