    #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();
            }
    };