LintCode-538: Memcache (System Design题)

这道题目主要考验hashmap的应用。记得node.timeout = curtTime + ttl - 1; //这里要-1.

class Memcache {
public:
    class Node {
        public:
            Node(int v = 0, int t = 0) : value(v), timeout(t) {}
            int value;
            int timeout;
    };

    /*
     * @param curtTime: An integer
     * @param key: An integer
     * @return: An integer
     */
    int get(int curtTime, int key) {
        if ((hashmap.find(key) == hashmap.end()) || 
            ((curtTime > hashmap[key].timeout) && (hashmap[key].timeout > 0))) {
            return INT_MAX;
        }

        return hashmap[key].value;    
    }

    /*
     * @param curtTime: An integer
     * @param key: An integer
     * @param value: An integer
     * @param ttl: An integer
     * @return: nothing
     */
    void set(int curtTime, int key, int value, int ttl) {
        Node node(value, 0);

        //if ttl = 0, timeout is already set as 0 in default constructor.
        if (ttl != 0) {
            node.timeout = curtTime + ttl - 1;
        }

        hashmap[key] = node;
    }


    /*
     * @param curtTime: An integer
     * @param key: An integer
     * @return: nothing
     */
    void del(int curtTime, int key) {
        if (hashmap.find(key) != hashmap.end()) {
            hashmap.erase(key);
        }
    }

    /*
     * @param curtTime: An integer
     * @param key: An integer
     * @param delta: An integer
     * @return: An integer
     */
    int incr(int curtTime, int key, int delta) {
        if (hashmap.find(key) == hashmap.end()) 
            return INT_MAX;

        if ((curtTime > hashmap[key].timeout) && (hashmap[key].timeout > 0))
            return INT_MAX;

        hashmap[key].value += delta;
        return hashmap[key].value;
    }

    /*
     * @param curtTime: An integer
     * @param key: An integer
     * @param delta: An integer
     * @return: An integer
     */
    int decr(int curtTime, int key, int delta) {
        if (hashmap.find(key) == hashmap.end()) 
            return INT_MAX;

        if ((curtTime > hashmap[key].timeout) && (hashmap[key].timeout > 0))
            return INT_MAX;

        hashmap[key].value -= delta;
        return hashmap[key].value;
    }

private:
    map<int, Node> hashmap;  
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值