Wyświetlenie części wspólnych

0

Witam mam problem z wypisaniem części wspólnych linii pod sobą, na przykład mam plik z takimi danymi, które zostały wpisane już do struktury

KR54R Katowice 2011-12-13 Jaworek 33
TY34O London 2012-02-03 Hastings 2
TY34O London 2012-02-03 Poirot 23
KR54R Katowice 2011-12-13 Matianek 02

A mam otrzymać coś takiego dla lotu KR54R:
symbol lotu: KR54R
lotnisko: Katowice
data lotu: 2011-12-13
lista pasazerow:
02 Matianek
33 Jaworek

Mam posortowane już miejsca, jednak nie wiem, jak otrzymać tą listę pasażerów bez wypisywania każdej linii. Jak na razie mam jedynie taką funkcję.

 void druk(lista glowa)
{
    lista kolejny;
    kolejny = glowa;

    while (kolejny != NULL)
    {
        cout <<"Symbol lotu  "<< kolejny->sym_lot << endl;
        cout << "Lotnisko " << kolejny->lotnisko << endl;
        cout << "Data " << kolejny->data_lot << endl;

            cout << kolejny->nazwisko << "  ";
            cout << kolejny->nr_miejsca << endl;

        kolejny = kolejny->nast;
    }
};
1

Przekazujesz obiekt lista, a nie wskaźnik, czy może on być nullem? A nie lepiej to zrobić na wektorze?

1

@AnyKtokolwiek: He, he, no tak, powinienem był jeszcze jedno pytanie zadać (ale nie chciało mi się stukać na telefonie :)).
@Loaki: Opisz dokładniej problem, i czy te dane:

symbol lotu: KR54R
lotnisko: Katowice
data lotu: 2011-12-13
lista pasazerow:
02 Matianek
33 Jaworek

Maja być wypisane na ekran, czy też znaleźc się w jakiejś strukturze?

0

@lion137:

Linie zostały podzielone i dodane już do struktury

struct dane {
    string sym_lot;
    string lotnisko;
    string data_lot;
    string nazwisko;
    string nr_miejsca;
    struct dane* poprz = NULL, * nast = NULL;
};

typedef dane* lista;
lista glowa = NULL;
lista wsk = NULL;

funkcja dodawania do struktury:

void dodawanie(struct dane** wezel, string sym_lot, string lotnisko, string data_lot, string nazwisko, string nr_miejsca) {

    //DEFINIUJEMY STRUKTURE
    struct dane* newNode = new dane;
    //DODAJEMY DANE
    newNode->sym_lot = sym_lot;
    newNode->lotnisko = lotnisko;
    newNode->data_lot = data_lot;
    newNode->nazwisko = nazwisko;
    newNode->nr_miejsca = nr_miejsca;

    //PRZESKAKUJEMY DALEJ
    newNode->nast = (*wezel);

    //JEZELI LSITA JESTA, TO WRACAMY NA POCZATEK
    if ((*wezel) != NULL)

        newNode->sym_lot = sym_lot;
    newNode->lotnisko = lotnisko;
    newNode->data_lot = data_lot;
    newNode->nazwisko = nazwisko;
    newNode->nr_miejsca = nr_miejsca;
    // (*wezel)->poprz = newNode;

 //ZAPISUJEMY ZMIANY
    (*wezel) = newNode;
}
2
void collect(lista *head)
{
    map<string,ostringstream> collector;
    for(lista *curr=head;curr;curr=curr->nast) collector[curr->lotnisko]<<'\t'<<curr->nazwisko<<endl;
    for(const auto &i:collector) cout<<i.first<<':'<<endl<<i.second.c_str()<<endl;
}

typedef string getter(const dane *d);
void collect(lista *head,getter key,getter value)
{
    map<string,ostringstream> collector;
    for(lista *curr=head;curr;curr=curr->nast) collector[key(curr)]<<'\t'<<value(curr)<<endl;
    for(const auto &i:collector) cout<<i.first<<':'<<endl<<i.second.c_str()<<endl;
}

// wywołanie
collect(glowa,[](d) { return d->sym_lot; },[](d) { return d->nazwisko; });

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0