Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <vector>
- using namespace std;
- ifstream fin("map.in");
- ofstream fout("map.out");
- struct item
- {
- string key;
- string value;
- };
- vector<vector<item>> HashTable(10000001, vector<item>());
- int GetHash(string key)
- {
- int Hash = 0;
- int p = 39;
- for (size_t i = 0; i < key.size(); i++) {
- int s = 0;
- if (key[i] - 'a' >= 0 && key[i] - 'a' <= 9)
- s = key[i] - 'a';
- else
- s = key[i] - 'A';
- Hash = (Hash + ((s + 1) * p) % 1000000) % 1000000;
- p = (p * 39) % 1000000;
- }
- return Hash;
- }
- void Put(string key, string value)
- {
- int Hash = GetHash(key);
- for (size_t i = 0; i < HashTable[Hash].size(); i++)
- {
- if (HashTable[Hash][i].key == key)
- {
- HashTable[Hash][i].value = value;
- return;
- }
- }
- HashTable[Hash].push_back({ key, value });
- return;
- }
- void Get(string key)
- {
- int Hash = GetHash(key);
- for (size_t i = 0; i < HashTable[Hash].size(); i++) {
- if (HashTable[Hash][i].key == key) {
- fout << HashTable[Hash][i].value << endl;
- return;
- }
- }
- fout << "none" << endl;
- return;
- }
- void Delete(string key)
- {
- int Hash = GetHash(key);
- bool flag = false;
- int number = 0;
- for (size_t i = 0; i < HashTable[Hash].size(); i++)
- {
- if (HashTable[Hash][i].key == key)
- {
- flag = true;
- number = i;
- }
- }
- if (!flag)
- return;
- for (size_t i = number; i < HashTable[Hash].size() - 1; i++)
- swap(HashTable[Hash][i], HashTable[Hash][i + 1]);
- HashTable[Hash].resize(HashTable[Hash].size() - 1);
- }
- int main()
- {
- string s;
- while (fin >> s)
- {
- switch (s[0])
- {
- case 'p':
- {
- string key, value;
- fin >> key;
- fin >> value;
- Put(key, value);
- break;
- }
- case 'g':
- {
- string key;
- fin >> key;
- Get(key);
- break;
- }
- case 'd':
- {
- string key;
- fin >> key;
- Delete(key);
- break;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement