SHARE
TWEET

Untitled

a guest Nov 19th, 2019 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top