У меня есть функция, которая после применения разбивает QHash до конца из заданной позиции и должна соответствующим образом обновить сопровождающий QList, чтобы отразить изменение QHash.QHash хранится как QHash<QString(Train ID), int(position of train)>
для быстрого поиска.QList хранит как QList в виде списка указателей на объекты.Данный заголовок для этой функции: QList<FreightCar*> splitTrain(int pos)
и не может быть изменен (т.е. может использоваться только как есть в заголовке).Я получил функцию для удаления только заданного значения «pos» и не перебирает QHash с циклом For с итератором.После QHash QList обновляется до значений в QHash, но не совсем.
Вот реализация функции.
QList<FreightCar*> FreightTrain::splitTrain(int pos)
{
QTextStream cout(stdout);
QHash<QString, int>::iterator i;
QList<FreightCar*>::iterator j;
int posI;
posI = pos;
//removal of posbyid by given id onwards
for(i = this->posByID.begin(); i != this->posByID.end(); )
{
if(i.value() == posI)
{
i = this->posByID.erase(i++);
posI++;
}
else
i++;
}
//end of removal of posbyid by given id onwards
//Display current values in QHash of posByID
for(auto i = this->posByID.begin(); i != this->posByID.end(); i++)
{
cout << "keyid: " << i.key() << " valpos: " << i.value() << endl;
};
//End of display of posByID values
//removal of same ID values from QHASH posbyId in QLIST physicalorder
bool yes;
for (auto j = this->physicalOrder.begin(); j != this->physicalOrder.end();)
{
yes = false;
for(auto i = this->posByID.begin(); i != this->posByID.end(); ++i)
{
if((*j)->getID() == i.key())
{
if(i.key() == pos)
{
yes = true;
break;
}else
{
yes = false;
break;
}
}else if((*j)->getID() != i.key())
{
yes = true;
}
}
if(yes == true)
{
j= this->physicalOrder.erase(j);
}else
{j++;};
}//end of removal of same ID values from posbyId in physicalorder
//display of QList after deletion.
for (auto j = this->physicalOrder.begin(); j != this->physicalOrder.end(); j++)
{
cout << (*j)->toString() << endl;
}
//end of display of list after deletion.
return *this;
};
Вывод программы после того, как я создалнесколько объектов (вагонов):
Функция разделения должна удалять все значения / объекты из заданной позиции до конца.Таким образом, все значения от начала до предоставленной позиции должны быть сохранены.
Каждый объект (Грузовой вагон) в грузовом поезде создается в физическом порядке.Каждому грузовому вагону присваивается идентификатор, присвоенный вес (тоннаж) и назначенный тип (BOXCAR, GONDOLACAR, TANKCAR, FLATBEDCAR).«Вальпос» относится к порядку, в котором каждая машина была создана 1,2,3,4,5 и т. д.«keyid» относится к идентификатору грузового вагона в физическом заказе QList.