如何通过QList迭代并将值组合在一起?

问题描述 投票:0回答:2

目前,我可以在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

c++ qt qt5
2个回答
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
投票

这是无关的,问题已经解决,但你不需要取消引用箭头操作符为你做的指针

//dont do this v
(*i)->getName();
//you can just do this
i->getName();

它不是必需的,但你做它的方式看起来很难看。如果你真的想要超级“适当”,你可以

(*i).getName();

但无论如何坚持使用箭头操作员

© www.soinside.com 2019 - 2024. All rights reserved.