#include <map>
#include <string>
#include <vector>
using std::map;
using std::vector;
using std::string;

typedef map<string,string> Podatak;

class BazaPodataka
{
public:
	// Čitanje jednog podatka iz baze podataka
	static bool ProcitajPodatak( int id, Podatak& x, string& tip )
    	{
    	vector<int> povezani;
    	return ProcitajSve( id, x, tip, povezani );
        }

	// Čitanje niza rednih brojeva povezanih podataka iz baze podataka
    static void ProcitajPovezane( int id, vector<int>& povezani )
    	{
    	Podatak x;
    	string tip;
    	ProcitajSve( id, x, tip, povezani );
    	}
    	
private:
	// Čitanje svih informacijao podatku iz baze podataka
	static bool ProcitajSve( int id, Podatak& x, string& tip, vector<int>& pov )
    	{
		// Statički podaci kojima simuliramo sadržaj baze podataka
        static map<int,Podatak> podaci;
        static map<int,vector<int> > povezani;
        static map<int,string> tipovi;
		// Podatke inicijalizujemo samo prvi put
        if( podaci.empty() ){
          { Podatak p;
            p["id"] = "42";
            p["naslov"] = "Lav";
            p["tekst"] = "Lav (Leo ili Panthera leo) je velika snažna mačka iz porodice Felidae, druga po veličini od velikih mačaka (posle tigra). ...";
            p["autor"] = "Pera Perić	";
            podaci[42] = p;
            povezani[42].push_back( 46 );
            povezani[42].push_back( 47 );
            povezani[42].push_back( 48 );
            povezani[42].push_back( 73 );
            tipovi[42] = "tekst";
          }{
            Podatak p;
            p["id"] = "47";
            p["naslov"] = "Lav";
            p["slika"] = "...binarni zapis slike...";
            p["sirina"] = "1024";
            p["visina"] = "768";
            p["napomena"] = "Odrasli primerak mužjaka u prirodnom okruženju.";
            p["autor"] = "Fotko Fotkić";
            podaci[47] = p;
            povezani[47].push_back( 42 );
            povezani[47].push_back( 46 );
            povezani[47].push_back( 48 );
            tipovi[47] = "slika";
          }{
            Podatak p;
            p["id"] = "46";
            p["naslov"] = "Urlik lava";
            p["zvuk"] = "...binarni zapis zvuka...";
            p["trajanje"] = "3764,45";
            p["napomena"] = "Upozoravajući urlik lava spremnog da brani svoju teritoriju.";
            p["autor"] = "Sima Snimić";
            podaci[46] = p;
            povezani[46].push_back( 42 );
            povezani[46].push_back( 47 );
            povezani[46].push_back( 48 );
            tipovi[46] = "zvuk";
          }{
            Podatak p;
            p["id"] = "48";
            p["naslov"] = "Lav u lovu";
            p["film"] = "...binarni zapis filma...";
            p["sirina"] = "640";
            p["visina"] = "400";
            p["trajanje"] = "124,75";
            p["napomena"] =
                "Lavica lovi antilopu. Obratite pažnju na pomoć "
                "koju joj pružaju ostali lavovi onemogućavajući "
                "antilopi bekstvo.";
            p["autor"] = "Žika Žikić";
            podaci[48] = p;
            povezani[48].push_back( 42 );
            povezani[48].push_back( 46 );
            povezani[48].push_back( 47 );
            tipovi[48] = "film";
          }{
            Podatak p;
            p["id"] = "73";
            p["naslov"] = "Tigar";
            p["tekst"] = "...neki tekst o tigru...";
            p["autor"] = "Žika Žikić";
            podaci[73] = p;
            povezani[73].push_back( 42 );
            tipovi[73] = "tekst";
           }
          }
		// Izračunavamo tražene podatke
        x = podaci[id];
        tip = tipovi[id];
        pov = povezani[id];
        return !tip.empty();
        }
};