fork download
  1. #include <iostream>
  2.  
  3. class HashMap {
  4. int c;
  5. int s;
  6. struct Node {
  7. char x;
  8. Node* next;
  9. };
  10. Node* a;
  11. public:
  12. HashMap() {
  13. int c = 10;
  14. int s = 0;
  15. Node* a = new Node[c];
  16. for(int i = 0; i != c; ++i) {
  17. a[i].x = 0;
  18. a[i].next = NULL;
  19. }
  20. }
  21. HashMap(int x) {
  22. int c = x;
  23. int s = 0;
  24. Node* a = new Node[c];
  25. for(int i = 0; i != c; ++i) {
  26. a[i].x = 0;
  27. a[i].next = NULL;
  28. }
  29. }
  30. ~HashMap() {
  31. clear();
  32. c = 0;
  33. Node* tmp = a;
  34. delete[] tmp;
  35. a = NULL;
  36. }
  37. HashMap(const HashMap& src) {
  38. c = src.c;
  39. s = src.s;
  40. a = new Node[c];
  41. for(int i = 0; i != c; ++i) {
  42. a[i].x = src.a[i].x;
  43. a[i].next = src.a[i].next;
  44. }
  45. }
  46. HashMap& operator=(const HashMap& src) {
  47. if(&src==this) {
  48. return *this;
  49. }
  50. else {
  51. c = src.c;
  52. s = src.s;
  53. a = new Node[c];
  54. for(int i = 0; i != c; ++i) {
  55. a[i].x = src.a[i].x;
  56. a[i].next = src.a[i].next;
  57. }
  58. }
  59. }
  60. int hash(int key) { return (key % c); }
  61. bool insert(int key, char value);
  62. bool remove(int key, char& value);
  63. void clear();
  64. bool is_empty() { return (s==0) ? true : false; }
  65. std::size_t capacity() { return c; }
  66. std::size_t size() { return s; }
  67. double load();
  68. std::ostream& print(std::ostream& out);
  69. };
  70.  
  71. bool HashMap::insert(int key, char value) {
  72. if(s==c)
  73. return false;
  74. int k = hash(key);
  75. if(a[k].x == 0) {
  76. ++s;
  77. }
  78. a[k].x = value;
  79. return true;
  80. }
  81.  
  82. bool HashMap::remove(int key, char& value) {
  83. int k = hash(key);
  84. if(is_empty() || (a[k].x==0))
  85. return false;
  86. value = a[k].x;
  87. --s;
  88. a[k].x = 0;
  89. return true;
  90.  
  91. }
  92.  
  93. void HashMap::clear() {
  94. for(int i = 0; i != c; ++i)
  95. a[i].x = 0;
  96. int s = 0;
  97. }
  98.  
  99. double HashMap::load() {
  100. double l = 0;
  101. int r = 0;
  102. for(int i = 0; i != c; ++i) {
  103. if(a[i].next != NULL)
  104. ++r;
  105. }
  106. r+= s;
  107. l = r/c;
  108. return l;
  109. }
  110.  
  111. std::ostream& HashMap::print(std::ostream& out) {
  112. if(is_empty()) {
  113. out << "<empty list>";
  114. }
  115. else {
  116. out << "[ ";
  117. for(int i = 0; i != (c-1); ++i) {
  118. if(a[i].x != 0)
  119. out << a[i].x;
  120. if(a[i].x == 0)
  121. out << "--";
  122. out << " : ";
  123. }
  124. if(a[c-1].x != 0)
  125. out << a[c-1].x;
  126. if(a[c-1].x == 0)
  127. out << "--";
  128. out << " ]";
  129. }
  130. out << std::endl;
  131. return out;
  132. }
  133.  
  134.  
  135. int main()
  136. {
  137. HashMap h;
  138. std::cout << std::boolalpha << h.is_empty() << std::endl;
  139. //std::cout << "Hello World" << std::endl;
  140.  
  141. return 0;
  142. }
Runtime error #stdin #stdout #stderr 0s 3436KB
stdin
Standard input is empty
stdout
false
stderr
*** Error in `./prog': free(): invalid pointer: 0xb761dff4 ***
======= Backtrace: =========
/lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x75e72)[0xb74e7e72]
/lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x76bb0)[0xb74e8bb0]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb76ca82f]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdaPv+0x1b)[0xb76ca87b]
./prog[0x8048d53]
./prog[0x804890b]
/lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xf5)[0xb748b8f5]
./prog[0x8048981]
======= Memory map: ========
08048000-0804a000 r-xp 00000000 08:03 1295714    /home/dJIHEh/prog
0804a000-0804b000 rw-p 00001000 08:03 1295714    /home/dJIHEh/prog
0947b000-0949c000 rw-p 00000000 00:00 0          [heap]
b7470000-b7472000 rw-p 00000000 00:00 0 
b7472000-b761b000 r-xp 00000000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b761b000-b761c000 ---p 001a9000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b761c000-b761e000 r--p 001a9000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b761e000-b761f000 rw-p 001ab000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b761f000-b7622000 rw-p 00000000 00:00 0 
b7622000-b763d000 r-xp 00000000 08:03 1303883    /lib/i386-linux-gnu/libgcc_s.so.1
b763d000-b763e000 rw-p 0001a000 08:03 1303883    /lib/i386-linux-gnu/libgcc_s.so.1
b763e000-b763f000 rw-p 00000000 00:00 0 
b763f000-b7680000 r-xp 00000000 08:03 1303836    /lib/i386-linux-gnu/i686/cmov/libm-2.17.so
b7680000-b7681000 r--p 00040000 08:03 1303836    /lib/i386-linux-gnu/i686/cmov/libm-2.17.so
b7681000-b7682000 rw-p 00041000 08:03 1303836    /lib/i386-linux-gnu/i686/cmov/libm-2.17.so
b7682000-b775e000 r-xp 00000000 08:03 1345926    /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18
b775e000-b775f000 ---p 000dc000 08:03 1345926    /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18
b775f000-b7763000 r--p 000dc000 08:03 1345926    /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18
b7763000-b7764000 rw-p 000e0000 08:03 1345926    /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18
b7764000-b776b000 rw-p 00000000 00:00 0 
b776d000-b7771000 rw-p 00000000 00:00 0 
b7771000-b7772000 r-xp 00000000 00:00 0          [vdso]
b7772000-b7791000 r-xp 00000000 08:03 1303796    /lib/i386-linux-gnu/ld-2.17.so
b7791000-b7792000 r--p 0001f000 08:03 1303796    /lib/i386-linux-gnu/ld-2.17.so
b7792000-b7793000 rw-p 00020000 08:03 1303796    /lib/i386-linux-gnu/ld-2.17.so
bffb3000-bffc8000 rw-p 00000000 00:00 0          [stack]