目前,我可以在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;
}
如果您有权访问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
工作所需的严格弱排序要求)
这是无关的,问题已经解决,但你不需要取消引用箭头操作符为你做的指针
//dont do this v
(*i)->getName();
//you can just do this
i->getName();
它不是必需的,但你做它的方式看起来很难看。如果你真的想要超级“适当”,你可以
(*i).getName();
但无论如何坚持使用箭头操作员