Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. /*
  2. Programmer: Maxim Levin
  3. Instructor: Professor Taylor
  4. Section: C
  5. Description: Program creates a hash table and has functions
  6. */
  7.  
  8. template <typename T>
  9. MyStringMap<T>::MyStringMap()
  10. {
  11. m_max = 0;
  12. m_size = 0;
  13. m_data = NULL;
  14. }
  15.  
  16. template <class T>
  17. void MyStringMap<T>::grow()
  18. {
  19. int oldmax = m_max;
  20. if(m_max==0)
  21. m_max++;
  22.  
  23. int newSize = (m_max*2);
  24.  
  25. item* newarray = new item [newSize];
  26.  
  27. if(oldmax == 0)
  28. {
  29. for(int k = 0; k < 2; k++)
  30. {
  31. newarray[k].key = "empty";
  32. }
  33. }
  34. else
  35. {
  36. for(int i = 0; i < m_max; i++)
  37. {
  38. newarray[i].key = m_data[i].key;
  39. newarray[i].value = m_data[i].value; // Moves data to a temp array
  40. }
  41. for(int j = m_max; j < newSize; j++)
  42. {
  43. newarray[j].key = "empty";
  44. }
  45. }
  46.  
  47. delete [] m_data;
  48. m_data = newarray;
  49. m_max = (newSize);
  50. return;
  51. }
  52.  
  53. template <typename T>
  54. const T& MyStringMap<T>::valueOf(const string & key) const throw (Oops)
  55. {
  56. int index = -1;
  57.  
  58. for(int i = hash(key); i < m_max; i++)
  59. {
  60. if(m_data[i].key == key)
  61. index = i;
  62. }
  63.  
  64. if(index == -1)
  65. {
  66. for(int i = 0; i < hash(key); i++)
  67. {
  68. if(m_data[i].key == key)
  69. index = i;
  70. }
  71. }
  72.  
  73. if(index == -1)
  74. throw Oops("Key not found!!");
  75. else
  76. return m_data[index].value;
  77.  
  78. }
  79.  
  80. template <typename T>
  81. void MyStringMap<T>::clear()
  82. {
  83. m_size = 0;
  84. m_max = 0;
  85. delete [] m_data;
  86. return;
  87. }
  88.  
  89. template <typename T>
  90. void MyStringMap<T>::remove(const string & k)
  91. {
  92. int index = -1;
  93. for(int i = hash(k); i < m_max; i++)
  94. {
  95. if(m_data[i].key == k)
  96. index = i;
  97. }
  98.  
  99. if(index == -1)
  100. {
  101. for(int i = 0; i < m_max; i++)
  102. {
  103. if(m_data[i].key == k)
  104. index = i;
  105. }
  106. }
  107. if(index != -1)
  108. {
  109. for(int j = index; j < m_max-1; ++j)
  110. {
  111. m_data[j].key = m_data[j+1].key;
  112. m_data[j].value = m_data[j+1].value;
  113. }
  114. m_size--;
  115. }
  116. return;
  117. }
  118.  
  119. template <typename T>
  120. void MyStringMap<T>::insert(const string& key, const T& val)
  121. {
  122.  
  123. if(m_size >= (m_max/2.0))
  124. grow();
  125.  
  126. int index = -1;
  127.  
  128. for(int i = hash(key); i < m_max; i++)
  129. {
  130. if(m_data[i].key == key)
  131. index = i;
  132. }
  133.  
  134. if(index == -1)
  135. {
  136. for(int i = 0; i < hash(key); i++)
  137. {
  138. if(m_data[i].key == key)
  139. index = i;
  140. }
  141. }
  142.  
  143. if(index == -1)
  144. {
  145. for(int i = hash(key); i < m_max; i++)
  146. {
  147. if(m_data[i].key == "empty")
  148. index = i;
  149. }
  150.  
  151. if(index == -1)
  152. {
  153. for(int i = 0; i < hash(key); i++)
  154. {
  155. if(m_data[i].key == "empty")
  156. index = i;
  157. }
  158. }
  159.  
  160. m_size++;
  161. }
  162.  
  163. m_data[index].key = key;
  164. m_data[index].value = val;
  165. return;
  166. }
  167.  
  168. template <typename T>
  169. void MyStringMap<T>::print() const
  170. {
  171. for(int i = 0; i < m_max; i++)
  172. {
  173. if(m_data[i].key != "empty")
  174. cout << "< " << m_data[i].key << ", " << m_data[i].value << " >" << endl;
  175. }
  176. return;
  177. }
  178.  
  179. template <typename T>
  180. int MyStringMap<T>::hash(const string & s) const
  181. {
  182. int sum = 0;
  183. for(unsigned int i = 0; i < s.size(); i++)
  184. sum += s[i];
  185. return (sum%m_max);
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement