Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <utility>
- template <typename tip1, typename tip2>
- class Mapa{
- public:
- Mapa(){}
- virtual ~Mapa(){}
- virtual tip2 &operator[](tip1 kljuc)=0;
- virtual tip2 operator[](tip1 kljuc) const=0;
- virtual int brojElemenata() const=0;
- virtual void obrisi()=0;
- virtual void obrisi(const tip1& kljuc)=0;
- };
- template <typename tip1, typename tip2>
- class NizMapa: public Mapa<tip1, tip2>{
- int duzina, kapacitet;
- std::pair<tip1,tip2> *pok;
- public:
- NizMapa(){
- duzina=0;
- kapacitet=50;
- pok=new std::pair<tip1, tip2>[50];
- }
- ~NizMapa(){
- delete []pok;
- pok=nullptr;
- duzina=0;
- kapacitet=0;
- }
- NizMapa(const NizMapa<tip1, tip2> &m){
- duzina=m.duzina;
- kapacitet=m.kapacitet;
- pok=new std::pair<tip1, tip2>[kapacitet];
- for(int i=0;i<duzina;i++){
- pok[i].first=m.pok[i].first;
- pok[i].second=m.pok[i].second;
- }
- }
- NizMapa<tip1, tip2> &operator =(const NizMapa<tip1, tip2> &m){
- if(this== &m) return *this;
- delete [] pok;
- duzina=m.duzina;
- kapacitet=m.kapacitet;
- pok=new std::pair<tip1, tip2>[kapacitet];
- for(int i=0;i<duzina;i++){
- pok[i].first=m.pok[i].first;
- pok[i].second=m.pok[i].second;
- }
- return *this;
- }
- tip2 operator [](tip1 cl) const{
- for(int i=0;i<duzina;i++){
- if(pok[i].first==cl){
- return pok[i].second;
- }
- }
- return tip2();
- }
- tip2 &operator [](tip1 cl){
- if(duzina==0){
- pok=new std::pair<tip1,tip2>[50];
- pok[0].first=cl;
- pok[0].second=tip2();
- duzina++;
- return pok[0].second;
- }
- for(int i=0;i<duzina;i++){
- if(pok[i].first==cl){
- return pok[i].second;
- break;
- }
- }
- if(duzina==kapacitet){
- std::pair<tip1, tip2> *pomocni=pok;
- pok=new std::pair<tip1, tip2>[2*kapacitet];
- for(int i=0;i<duzina;i++){
- pok[i]=std::make_pair(pomocni[i].first, pomocni[i].second);
- }
- delete [] pomocni;
- kapacitet*=2;
- }
- pok[duzina].first=cl;
- pok[duzina].second=tip2();
- duzina++;
- return pok[duzina-1].second;
- }
- int brojElemenata() const{
- return duzina;
- }
- void obrisi(){
- if(duzina==0) return;
- delete [] pok;
- pok=nullptr;
- duzina=0;
- }
- void obrisi(const tip1& kljuc){
- for(int i=0;i<duzina;i++){
- if(pok[i].first==kljuc){
- for(int j=i;j<duzina-1;j++){
- pok[j].first=pok[j+1].first;
- pok[j].second=pok[j+1].second;
- }
- duzina--;
- return;
- }
- }
- throw std::logic_error("Nejma");
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement