Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- struct Item{
- string key;
- int value;
- };
- struct Hashmap{
- Item* element{};
- int a = 13;
- long m = 1e9 + 19;
- long capacity;
- long count = 0;
- long hash(string key) const{
- long c = a;
- long sum = 0;
- for (int i = 0; i < key.size(); ++i) {
- sum += ((key[i] - '-' + 1) * c) % m;
- c = (c * a) % m;
- }
- return sum % capacity;
- }
- void init(int size){
- this->element = (Item*)malloc(size * sizeof(Item));
- capacity = size;
- }
- void put(const string& key, int value){
- long hashed = hash(key);
- if(this->element[hashed].key == key){
- this->element[hashed].value = value;
- }else if(!this->element[hashed].key.empty()){
- long temp = hashed + 1;
- while(!this->element[temp].key.empty()){
- if(temp < capacity){
- temp++;
- }else{
- temp = 0;
- }
- }
- this->element[temp].key = key;
- this->element[temp].value = value;
- }else{
- this->element[hashed].key = key;
- this->element[hashed].value = value;
- }
- this->count++;
- }
- int get(string key) const{
- long hashed = hash(key);
- if(this->element[hashed].key == key){
- return this->element[hashed].value;
- }else{
- for(int i = hashed + 1; i < count; i++){
- if(i == count - 1){
- for(int j = 0; j < hashed; j++){
- if(this->element[j].key == key) return this->element[j].value;
- }
- break;
- }
- if(this->element[i].key == key) return this->element[i].value;
- }
- return -1;
- }
- }
- int delete_key(string key) const{
- int hashed = hash(key);
- if(this->element[hashed].key.empty()){
- return -1;
- }
- int val = this->element[hashed].value;
- this->element[hashed].key = "";
- this->element[hashed].value = 0;
- return val;
- }
- };
- int main(){
- Hashmap hashmap;
- int n;
- cin >> n;
- hashmap.init(n + n / 2);
- vector<string> res;
- while(n--){
- string request;
- cin >> request;
- if(request == "get" || request == "delete"){
- string key;
- cin >> key;
- int ans;
- if(request == "get"){
- ans = hashmap.get(key);
- }else{
- ans = hashmap.delete_key(key);
- }
- if(ans == -1){
- res.emplace_back("None");
- }else{
- res.push_back(to_string(ans));
- }
- }else if(request == "put"){
- string key;
- int value;
- cin >> key >> value;
- hashmap.put(key, value);
- }
- }
- for(auto el : res){
- cout << el << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement