Как перебирать QList и группировать значения вместе? - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время я могу ввести значения в 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 голосов
/ 05 сентября 2018

это не связано, и вопрос уже решен, но вам не нужно разыменовывать указатель, оператор стрелки делает это за вас

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

это не обязательно, но то, как ты это делаешь, выглядит ужасно. если бы ты действительно хотел быть супер "правильным", ты мог бы

(*i).getName();

но в любом случае придерживайтесь стрелочного оператора

0 голосов
/ 04 сентября 2018

Если у вас есть доступ к 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 вам нужно написать функцию / класс для использования вместо лямбды.

(Кстати, я предполагаю, что тип, возвращаемый getPayment()->getType(), имеет operator<, который удовлетворяет строгому требованию слабого упорядочения, необходимому для работы std::sort)

...