Professional Documents
Culture Documents
Parovi U C++
Parovi U C++
PAROVI
Student:Mirhat Bei
Biha,maj 2012.
UVOD
Tema mog seminarskog rada su parovi. Cilj mi je da na to jednostavniji nain poblie objasnim funkciju i upotrebu parova. Par je generiki tip podatka koji se koristi zajedno sa vektorima, listama te mapama. On se koristi da bi se mogli napraviti ureeni parovi izmeu istih i razliitih tipova podataka. npr parovi pair<char,int>, pair<string,int> i slino. Kako bi se parovi mogli upotrebljavati ukratko u da objasnim ta su i kakva je funkcija parova sa vektorima, mapama i listama. Kontejneri su tipovi podataka koji sadre druge podatke (elementi kontejnera), te imaju lanove funkcije za pristup elementima. Kontejneri mogu dinamiki rasti, tj. u njih se mogu nadodavati novi elementi tokom izvoenja programa. Kontejneri u STL biblioteci imaju sljedee nazive: vektori (vectors), liste (lists), dvostruki redovi. Vektor je sekvencijalni kontejner. Sekvencijalnim kontejnerima podaci su ureeni kao sekvenca (dio) elemenata. Omoguava laku manipulaciju elementima. Sekvencijalni kontejneri omoguavaju umetanje i brisanje elementa na specificiranoj poziciji. STL (Standard Template Library) je biblioteka kontejnera, iteratora i algoritama. Lista je sekvencijalni kontejner. Prednost u odnosu na vektor je to ima visoku efikasnost kod dodavanja novih elemenata na bilo koju lokaciju u listi. Elementi liste pored vrijednosti sadre adrese prethodnog i sljedeeg elementa.
Operacije na pair-u Na parovima se mogu izvoditi sljedee operacije: pair<T1, T2> p; pair<T1, T2> p(v1, v2); make_pair(v1, v2); p1 < p2 p1 == p2 p.first p.second tipova). Primjeri zadataka koritenja parova Primjer 1. Uitavajte znak po znak sa tipkovnice sve dok ne uitate taku. Ako ste proitali slovo, spremite ga u vektor. Vektor neka se sastoji od ureenih parova <slovo, broj pojavljivanja slova>. Dakle, kada proitate novo slovo, potrebno je pregledati da li u vektoru ve postoji navedeno slovo. Ako postoji, samo treba poveati odgovarajui broja; inae treba ubaciti novo slovo (sa odgovarajuim brojaem) na kraj vektora. #include<iostream> #include<vector> // ukljuiemo vektor datoteku using namespace std; typedef pair<char,int> brojacSlova; //na ovaj nain definisemo parove void main() { vector<brojacSlova> v(26); //oznaava broj slova u engleskom alfabetu char z; //definiemo promjenljivu tipa char for(int i=0, z='A'; i<26;i++,z++) { v[i].first=z;// prvi clan para je z
5
//stvara i vraa novi par //leksikografsko usporeivanje //usporeivanje po koordinatama //prva koordinata //pronalazi drugu koordinatu
Par dozvoljava direktan pristup svojim koordinatama (za razliku od veine ostalih bibliotenih
v[i].second=0; // drgi clan para je 0 } cout<<"Vektor brojaca: "<<endl; for(int i=0;i<26;i++) cout<<"("<<v[i].first<<","<<v[i].second<<")"<<endl; //ispisuje na ekran vektore parova slova i 0 cout<<"Recenica: "<<endl;//unos recenice sve dok se ne pritisne . cin>>z; while(z!='.') { for(int i=0;i<v.size();i++) { if(v[i].first==z) v[i].second++; } cin>>z; } cout<<"Brojaci pojavljivanja slova :"<<endl; for(int i=0;i<v.size();i++) cout<<"("<<v[i].first<<","<<v[i].second<<")"<<endl; system("pause"); } Primjer 2. Kreirati vektor parova koji sadri parove unesenih cijelih brojeva. Te na ekranu prikazati te parove. #include<iostream> #include<vector> using namespace std; typedef pair<int,int> ParInt; void main() { vector<ParInt> v(6); cout<<"Unos: "<<endl; for(int i=0;i<v.size();i++) { v[i].first=i; v[i].second=i;
6
MAPA
STL mapa (std::map) je asocijativni kontejner. Asocijativni kontejneri sadre podatke i kljueve za dohvaanje podataka. Oni dozvoljavaju umetanje i brisanje elementa ali ne i na specificiranoj poziciji. Elementi mape su STL parovi (std::pair). Prvi lan parova mape se naziva klju a drugi lan para mape je podatak. Vrijednost nekog kljua u mapi mora biti jedinstvena. Elementi u mapi su sortirani po vrijednostima kljueva. Ako se eksplicitno ne navede onda su sortirani od najmanje vrijednosti kljua do najvee. Npr. map<int,string> m; m je mapa s parovima u kojima su kljuevi tipa int a podaci tipa string. Elementi su sortirani po vrijednosti kljueva tj. cijelih brojeva i to od manjeg ka veem. Ako bi eljeli mapu u kojoj su kljuevi i podaci istog tipa kao u mapi m ali sortiranje je od najveeg ka najmanjoj vrijednosti kljua, tada emo takvu mapu deklarirati: map<int,string, greater<int>> m; Sa prediktorom greater<int> sortiramo elemente mape od vee ka manjoj vrijednosti kljueva. Vrijednost podataka se moe direktno mijenjati ali ne i kljua.
Nekoliko jednostavnih primjera koritenja mape. Kroz koje emo vidjeti njenu primjenu prilikom kreiranja jednostavnih mapa parova i jednostavan nain kriranja takvih mapa parova.
Primjer 1. Napravimo mapu parova koja sadri broj indeksa i ime studenta. Prilikom poziva po imenu studenta potrebno je da se ispie njegov broj indeksa. #include<iostream> #include<map> #include<string> using namespace std; typedef pair<string,string> mapa; void main() { map<string,string> m; map<string,string>::iterator it; m["B2765"]="Nermin Huskic"; m["A2341"]="Mirhat Besic"; m["C4567"]="Meris Sakonjic"; m["D2345"]="Muhamed Pehlivanovic"; for(it=m.begin();it!=m.end();it++) if(it->second=="Meris Sakonjic")cout<<it->first<<endl; system("pause"); }
Ovo je bio primjer u kojem se koristi naredba typedef pair<string,string> mapa; koja ima promjenljive istog tipa string. Primjer 2 Napraviti mapu parova njemako-bosanskih linih zamjenica jednine. Te kad uitamo zamjenicu na njemakom da nam izbaci prevod na bsanskom jeziku. #include<iostream> #include<string> #include<map> #include<vector> using namespace std; void main() { map<string, string> rijecnik; rijecnik["Ich"]="Ja "; rijecnik["Du"]="Ti"; rijecnik["Er"]="On"; rijecnik["Sie"]="Ona"; rijecnik["Es"]="Ono"; map<string, string>::iterator i; for(i=rijecnik.begin();i!=rijecnik.end();i++) cout<<i->first +"="+ i->second <<endl; string st; cout<<"Upisi licnu zamjenicu na njemackom :"; while(st!=".") { cin>>st; cout<<"Bosanski prijevod:"; cout<<rijecnik[st]<<" "; system("pause"); }
9
LITERATURA
1. Objektno programiranje (C++), Vinko Petrievi, PMF Matematiki odjel, Sveuilite Zagreb 2. Strukture podataka, Selim Pai, Zagreb, 2008
3. http://www.cplusplus.com/reference/std/utility/pair/ 4. http://www.codecogs.com/reference/computing/stl/containers/pair.php
10
SADRAJ
UVOD........................................................................................................................... 3 Upotreba STL par ( std::pair)....................................................................................... 4 MAPA........................................................................................................................... 7 LITERATURA..................................................................................................... 10 SADRAJ.................................................................................................................... 11
11