Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. ifstream fin("map.in");
  8. ofstream fout("map.out");
  9. struct item
  10. {
  11. string key;
  12. string value;
  13. };
  14. vector<vector<item>> HashTable(10000001, vector<item>());
  15.  
  16. int GetHash(string key)
  17. {
  18. int Hash = 0;
  19. int p = 39;
  20. for (size_t i = 0; i < key.size(); i++) {
  21. int s = 0;
  22. if (key[i] - 'a' >= 0 && key[i] - 'a' <= 9)
  23. s = key[i] - 'a';
  24. else
  25. s = key[i] - 'A';
  26. Hash = (Hash + ((s + 1) * p) % 1000000) % 1000000;
  27. p = (p * 39) % 1000000;
  28. }
  29. return Hash;
  30. }
  31.  
  32. void Put(string key, string value)
  33. {
  34. int Hash = GetHash(key);
  35. for (size_t i = 0; i < HashTable[Hash].size(); i++)
  36. {
  37. if (HashTable[Hash][i].key == key)
  38. {
  39. HashTable[Hash][i].value = value;
  40. return;
  41. }
  42. }
  43. HashTable[Hash].push_back({ key, value });
  44. return;
  45. }
  46. void Get(string key)
  47. {
  48. int Hash = GetHash(key);
  49. for (size_t i = 0; i < HashTable[Hash].size(); i++) {
  50. if (HashTable[Hash][i].key == key) {
  51. fout << HashTable[Hash][i].value << endl;
  52. return;
  53. }
  54. }
  55. fout << "none" << endl;
  56. return;
  57. }
  58. void Delete(string key)
  59. {
  60. int Hash = GetHash(key);
  61. bool flag = false;
  62. int number = 0;
  63. for (size_t i = 0; i < HashTable[Hash].size(); i++)
  64. {
  65. if (HashTable[Hash][i].key == key)
  66. {
  67. flag = true;
  68. number = i;
  69. }
  70. }
  71. if (!flag)
  72. return;
  73. for (size_t i = number; i < HashTable[Hash].size() - 1; i++)
  74. swap(HashTable[Hash][i], HashTable[Hash][i + 1]);
  75.  
  76. HashTable[Hash].resize(HashTable[Hash].size() - 1);
  77. }
  78. int main()
  79. {
  80. string s;
  81. while (fin >> s)
  82. {
  83. switch (s[0])
  84. {
  85. case 'p':
  86. {
  87. string key, value;
  88. fin >> key;
  89. fin >> value;
  90. Put(key, value);
  91. break;
  92. }
  93. case 'g':
  94. {
  95. string key;
  96. fin >> key;
  97. Get(key);
  98. break;
  99. }
  100. case 'd':
  101. {
  102. string key;
  103. fin >> key;
  104. Delete(key);
  105. break;
  106. }
  107. }
  108. }
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement