LeetCode 706——设计哈希映射

一、题目介绍

不使用任何内建的哈希表库设计一个哈希映射

具体地说,你的设计应该包含以下的功能

put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。
get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。
remove(key):如果映射中存在这个键,删除这个数值对。

二、解题思路

本题的思路和LeetCode 705题的实现思路相同,差别在于元素的类型需要更改成pair类型。如果当键对应的值已经存在时,按照题目要求需要更新这个值。

三、解题代码

class MyHashMap {
private:
    vector<vector<pair<int, int>>> m_arr;
    int m_len;
public:
    /** Initialize your data structure here. */
    MyHashMap() {
        m_len = 1000;
        m_arr.resize(m_len);
    }
    
    /** value will always be non-negative. */
    void put(int key, int value) {
        int index = key%m_len;
        if(m_arr[index].size() == 0)
        {
            m_arr[index].push_back(pair(key, value));
        }
        else
        {
            vector<pair<int,int> >::iterator it; 
            for(it = m_arr[index].begin(); it != m_arr[index].end(); ++it)
            {
                if(it->first == key)
                {
                    it->second = value;
                    return;
                }
            }
            m_arr[index].push_back(pair(key, 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 index = key%m_len;
        if(m_arr[index].size() == 0)
            return -1;
        else
        {
            vector<pair<int,int>>::iterator it = m_arr[index].begin();
            for(; it != m_arr[index].end(); ++it)
            {
                if(it->first == key)
                    return it->second;
            }
            return -1;
        }
    }
    
    /** Removes the mapping of the specified value key if this map contains a mapping for the key */
    void remove(int key) {
        int index = key%m_len;
        if(m_arr[index].size() == 0)
            return;
        else
        {
            vector<pair<int,int>>::iterator it = m_arr[index].begin();
            for(; it != m_arr[index].end(); ++it)
            {
                if(it->first == key)
                {
                    m_arr[index].erase(it);
                    return;
                }
            }
        }
    }
};

四、解题结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值