如何遍历QList并将值分组在一起?

时间:2018-09-04 19:09:45

标签: c++ qt qt5

当前,我可以将值输入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;

  }

显示如下: Example

2 个答案:

答案 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();

但无论如何还是坚持使用箭头运算符