Rozumiem, że:
- nie możesz korzystać z stl containerow typu std::map, std::vector, std::list i dynamicznie allocowanych arrayów
- masz to wyprintować gdzieś do indywidualnych plików
- Wczytujesz cały plik z inputem do singly linked listy Bookings, która reprezentuje wszystkie rezerwacje.
- Sortujesz tę listę jakimś merge sortem według typu lotu i numeru siedzenia.
Powyższy input po posortowaniu:
KR54R Katowice 2011-12-13 Matianek 02
KR54R Katowice 2011-12-13 Lopez 12
KR54R Katowice 2011-12-13 Jaworek 33
KR54R Katowice 2011-12-13 Chavez 43
TY34O London 2012-02-03 Hastings 2
TY34O London 2012-02-03 Holmes 11
TY34O London 2012-02-03 Poirot 23
TY34O London 2012-02-03 Lemon 43
Właściwie to już skończyłeś zadanie tylko wypisz to do plików. Ewentualnie:
- Potem (takie coś wygrzebałem, not my proudest fap xD):
/** Function iterates through sorted <b>Bookings</b> list and if current node is <u>different</u> than previous, then <b>symbol</b> of that node
is put into <b>UniqueSymbols</b> list. As a result, the <b>UniqueSymbols</b> list contains only unique values of <b>symbol</b>.
@param headBookings pointer to the first node of <b>Bookings</b>
@param headSymbol pointer to the first node of <b>Symbol</b> */
void getUniqueSymbols(Bookings* headBookings, UniqueSymbols*& headSymbols)
{
Bookings* current = headBookings;
if (current)
headSymbols = new UniqueSymbols{headSymbols, current->symbol}; // create first node of UniqueSymbols
else
return;
Bookings* prev = current; // save current as previous
current = current->next; // shift next
while (current) {
/** if current node's flight symbol is different than previous node's, then add that symbol into UniqueSymbols
* by doing so, and because Bookings list is sorted, UniqueSymbols list ends up with only unique symbols
* and thus individual .txt files can be created/printed into, that is: one file for each flight symbol */
if (current->symbol != prev->symbol) {
headSymbols = new Target{headSymbols, current->symbol};
current = current->next;
prev = prev->next;
}
/** and if it's not different, then simply iterate further */
else {
current = current->next;
prev = prev->next;
}
}
}
W efekcie czego masz taką listę:
KR54R
TY34O
- Iterujesz jednocześnie po UniqueSymbols i po Bookings tworząc przy tym pliki i printujesz posortowany już do środka content.
Anyway, cały krok 3 jest niepotrzebny.
Poćwicz listy. Dodaj error handling. Nie miej memory leaków. Sama w sobie optymalność rozwiązania nie ma znaczenia.