Question

C++ Problem I want to understand why did we use (1001, vector<int>()) when we initialize the...

C++ Problem

I want to understand why did we use (1001, vector<int>()) when we initialize the data structure?

I want to understand why are we using /1000 and %1000 for the hash1 and hash2 values?

The code is below the question

Question

Design a HashMap without using any built-in hash table libraries.

To be specific, your design should include these functions:

  • put(key, value) : Insert a (key, value) pair into the HashMap. If the value already exists in the HashMap, update the value.
  • get(key): Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.
  • remove(key) : Remove the mapping for the value key if this map contains the mapping for the key.


Example:

MyHashMap hashMap = new MyHashMap();
hashMap.put(1, 1);          
hashMap.put(2, 2);         
hashMap.get(1);            // returns 1
hashMap.get(3);            // returns -1 (not found)
hashMap.put(2, 1);          // update the existing value
hashMap.get(2);            // returns 1 
hashMap.remove(2);          // remove the mapping for 2
hashMap.get(2);            // returns -1 (not found) 


Note:

  • All keys and values will be in the range of [0, 1000000].
  • The number of operations will be in the range of [1, 10000].
  • Please do not use the built-in HashMap library.
Code Answer

class MyHashMap {
public:
    /** Initialize your data structure here. */
    MyHashMap() {
        myMap = vector<vector<int>>(1001,vector<int>());
    }
    
    /** value will always be non-negative. */
    void put(int key, int value) {
        int hash1 = key/1000;
        int hash2 = key%1000;
        if (myMap[hash1].empty()) myMap[hash1].resize(1000,-1);
        myMap[hash1][hash2] = value;
    }
    
    /** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
    int get(int key) {
        int hash1 = key/1000;
        int hash2 = key%1000;
        if (myMap[hash1].empty()) return -1;
        return myMap[hash1][hash2];
    }
    
    /** Removes the mapping of the specified value key if this map contains a mapping for the key */
    void remove(int key) {
        int hash1 = key/1000;
        int hash2 = key%1000;
        if (myMap[hash1].empty()) return ;
        myMap[hash1][hash2] = -1;
    }

    vector<vector<int>> myMap;
};
0 0
Add a comment Improve this question Transcribed image text
Answer #1
  • we used  (1001, vector<int>()) when we initialize the data structure because, in myMap, we are storing 1001 vectors of type int with default size each.
  • we using /1000 and %1000 for the hash1 and hash2 values as our each vector side is 1000 max and it can't store more elements then 1000 so using '%' and '/' reduce size of hash to <1000
Add a comment
Know the answer?
Add Answer to:
C++ Problem I want to understand why did we use (1001, vector<int>()) when we initialize the...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT