Смежный связанный список отображения C ++

Я создал связанный список смежности, чтобы показать рейсы между городами. Программа читает из 2 файлов, один содержит названия городов, а другой — источник и пункт назначения различных рейсов. Я создал массив для обслуживаемых городов и связанный список соединяющих городов для каждого индекса города массива. Однако у меня возникли проблемы с распечаткой списка. Мой выход выглядит так:

Origin --  Dest     ---      Flight No. --       Price

NYC    ---          Chicago  --        3123   ----             123
NYC    ----        Miami    ----        2123      ----          543
NYC         ----     Seattle   ---       9283        ----        243

Я хочу знать, смогу ли я распечатать город происхождения только один раз.

Вот мой код для структуры и других вещей:

 struct flight
{
int fNumber;
string source;
string dest;
int price;
}

оператор перегрузки для вывода
p.source это происхождение, p.dest это пункт назначения и так далее

 ostream& operator<<(ostream & os, const flight & p)
{
os <<"From "<< p.source << " to: ";
int diff=0;
diff= 35- p.source.length();
os << fixed<< setw(diff)<<right<< p.dest;
os << setw(10)<<right<<p.fNumber;
os << setw(10)<<right<<p.price;
return os;
}

и функция отображения

void flightMap::display()
{
cout<<setw(15)<<"Origin   "<<setw(30)<<"Destination"<<setw(12)<<"Flight     "<<setw(13)    <<"Price     "<<endl;
cout<<"================================================================="<<endl;

for (int i=0; i<number;  i++)
{
flightRecord[i].display();
}
}

Я хочу, чтобы мой вывод выглядел так

Origin Dest Flight No. Price

NYC Chicago 3123 123
----   Miami 2123 543
----  Seattle 9283 243

1

Решение

Вы можете сделать это, но это, вероятно, требует небольшой реорганизации вашего кода. Первое, что должно измениться, это

ostream& operator<<(ostream & os, const flight & p)

Это стандартный способ печати, но здесь он недостаточно хорош, потому что нет способа сообщить этой функции, печатать город-источник или нет. Итак, давайте напишем другую функцию

void printFlight(ostream & os, const flight & p, bool printSource)
{
if (printSource)
os <<"From "<< p.source << " to: ";
else
os <<"From --- to: ";
...
}

Теперь вы можете использовать эту функцию в своем цикле, если вы помните, каким был последний город источника, который вы напечатали. Если последний исходный город отличается от текущего исходного города, вы печатаете исходный город, в противном случае — нет. Что-то вроде этого

string lastSource = "";
for (int i=0; i<number;  i++)
{
printFlight(cout, flightRecord[i], flightRecord[i].source != lastSource);
lastSource = flightRecord[i].source;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]