#include <iostream>
#include <fstream>
#include <map>
#include <vector>

using namespace std;

struct adat
{
    string act;
    int h;
};

struct szotar_adat
{
    int a, b;
    string nev;     // pl.: 5 6 Béla 10
    int c;
};

int main()
{
    setlocale(LC_ALL, "");
    vector<adat> StructAdat;
    vector<vector<int>> szamok;
    ofstream fki;       // fájlváltozó kiíráshoz (o - output)
    fki.open("teszt.txt");
    // kiírás úgy megy, mintha a képernyőre írnánk...
    cout << "------------------------- Kiírás a teszt.txt-be! -------------------------" << endl;
    fki << "nyitás\n";
    fki << "zárás\n";
    fki << "nyitvatartás\n";
    fki.close();

    cout << "------------------------- Olvasás a teszt.txt-ből! -------------------------" << endl;
    ifstream fbe;       // fájlváltozó olvasáshoz (i - input)
    fbe.open("teszt.txt");
    string sor;
    while(getline(fbe,sor))     // egy teljes sort olvas be, de az entert nem, addig amíg van sor...
        cout << sor << endl;

    fbe.close();


    cout << "------------------------- Olvasás a teszt2.txt-ből egy struktúra elemű vektorba! -------------------------" << endl;
    adat temp;
    fbe.open("teszt2.txt");
    while(fbe>>temp.act and fbe>>temp.h)
    {
        StructAdat.push_back(temp);
        //cout << temp.act << " " << temp.h << endl;
    }
    fbe.close();
    for(auto &elem:StructAdat)
    {
        cout << elem.act << " " << elem.h << endl;
    }
    cout << "------------------------- Olvasás a teszt3.txt-ből egy mátrixba! -------------------------" << endl;
    // fájlváltozó olvasáshoz (i - input)
    fbe.open("teszt3.txt");

    int temp_szam;
    vector<int> v;
    int i=0;
    while(fbe>>temp_szam)
    {
        v.push_back(temp_szam);
        i++;
        if(i%5==0)
        {
            szamok.push_back(v);
            v.clear();
            i=0;
        }
    }

    for(auto &vect:szamok)
    {
        for(auto &elem:vect)
        {
            cout << elem << " ";
        }
        cout << endl;
    }

    fbe.close();

    cout << "------------------------- Olvasás a teszt4.txt-ből egy szótárba! -------------------------" << endl;
    // fájlváltozó olvasáshoz (i - input)
    fbe.open("teszt4.txt");

    map<int,vector<szotar_adat>> szotar;    // ez lesz a szótárunk: kulcs integer, bejegyzés vektor
    szotar_adat temp_sz;                    // ebbe olvassuk be a fájl sorait ideiglenesen
    int id;                                 // ez lesz a szótárunk kulcsa: a vendég azonosítója
    while(fbe>>id&&fbe>>temp_sz.a&&fbe>>temp_sz.b&&fbe>>temp_sz.nev&&fbe>>temp_sz.c)
    {
        szotar[id].push_back(temp_sz);          // szótár feltöltése: a szótár "bejegyzése" egy vector, az adott fájlsorból képezve...
    }
    fbe.close();

    for(auto elem:szotar)
    {
        cout << elem.first << ":" << endl;      // first a kulcs
        for(auto e:elem.second)                 // second a kulcshoz tartozó vektor
        {
            cout << e.a << " " << e.b << " " << e.nev << " " << e.c << endl;
        }
        cout << "----------------------" << endl;
    }

    return 0;
}
