Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. template <typename tip1, typename tip2>
  5. class Mapa{
  6. public:
  7. Mapa(){}
  8. virtual ~Mapa(){}
  9. virtual tip2 &operator[](tip1 kljuc)=0;
  10. virtual tip2 operator[](tip1 kljuc) const=0;
  11. virtual int brojElemenata() const=0;
  12. virtual void obrisi()=0;
  13. virtual void obrisi(const tip1& kljuc)=0;
  14. };
  15.  
  16. template <typename tip1, typename tip2>
  17. class NizMapa: public Mapa<tip1, tip2>{
  18. int duzina, kapacitet;
  19. std::pair<tip1,tip2> *pok;
  20. public:
  21. NizMapa(){
  22. duzina=0;
  23. kapacitet=50;
  24. pok=new std::pair<tip1, tip2>[50];
  25. }
  26. ~NizMapa(){
  27. delete []pok;
  28. pok=nullptr;
  29. duzina=0;
  30. kapacitet=0;
  31. }
  32. NizMapa(const NizMapa<tip1, tip2> &m){
  33. duzina=m.duzina;
  34. kapacitet=m.kapacitet;
  35. pok=new std::pair<tip1, tip2>[kapacitet];
  36. for(int i=0;i<duzina;i++){
  37. pok[i].first=m.pok[i].first;
  38. pok[i].second=m.pok[i].second;
  39. }
  40. }
  41. NizMapa<tip1, tip2> &operator =(const NizMapa<tip1, tip2> &m){
  42. if(this== &m) return *this;
  43. delete [] pok;
  44. duzina=m.duzina;
  45. kapacitet=m.kapacitet;
  46. pok=new std::pair<tip1, tip2>[kapacitet];
  47. for(int i=0;i<duzina;i++){
  48. pok[i].first=m.pok[i].first;
  49. pok[i].second=m.pok[i].second;
  50. }
  51. return *this;
  52. }
  53. tip2 operator [](tip1 cl) const{
  54. for(int i=0;i<duzina;i++){
  55. if(pok[i].first==cl){
  56. return pok[i].second;
  57. }
  58. }
  59. return tip2();
  60. }
  61. tip2 &operator [](tip1 cl){
  62. if(duzina==0){
  63. pok=new std::pair<tip1,tip2>[50];
  64. pok[0].first=cl;
  65. pok[0].second=tip2();
  66. duzina++;
  67. return pok[0].second;
  68. }
  69. for(int i=0;i<duzina;i++){
  70. if(pok[i].first==cl){
  71. return pok[i].second;
  72. break;
  73. }
  74. }
  75. if(duzina==kapacitet){
  76. std::pair<tip1, tip2> *pomocni=pok;
  77. pok=new std::pair<tip1, tip2>[2*kapacitet];
  78. for(int i=0;i<duzina;i++){
  79. pok[i]=std::make_pair(pomocni[i].first, pomocni[i].second);
  80. }
  81. delete [] pomocni;
  82. kapacitet*=2;
  83. }
  84. pok[duzina].first=cl;
  85. pok[duzina].second=tip2();
  86. duzina++;
  87. return pok[duzina-1].second;
  88. }
  89. int brojElemenata() const{
  90. return duzina;
  91. }
  92. void obrisi(){
  93. if(duzina==0) return;
  94. delete [] pok;
  95. pok=nullptr;
  96. duzina=0;
  97. }
  98. void obrisi(const tip1& kljuc){
  99. for(int i=0;i<duzina;i++){
  100. if(pok[i].first==kljuc){
  101. for(int j=i;j<duzina-1;j++){
  102. pok[j].first=pok[j+1].first;
  103. pok[j].second=pok[j+1].second;
  104. }
  105. duzina--;
  106. return;
  107. }
  108. }
  109. throw std::logic_error("Nejma");
  110. }
  111. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement