91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

設計一個基于紅黑樹的C++通用緩存系統

c++
小樊
84
2024-04-26 19:43:00
欄目: 編程語言

紅黑樹是一種自平衡的二叉搜索樹,可以用于實現高效的查找、插入和刪除操作。結合紅黑樹和緩存系統可以實現高效的數據存儲和檢索。下面是一個基于紅黑樹的C++通用緩存系統的簡單實現:

#include <iostream>
#include <map>
#include <list>

template <typename K, typename V>
class LRUCache {
private:
    int capacity;
    std::map<K, std::pair<V, typename std::list<K>::iterator>> cacheMap;
    std::list<K> lruList;

public:
    LRUCache(int capacity) : capacity(capacity) {}

    V get(K key) {
        if (cacheMap.find(key) == cacheMap.end()) {
            return V();
        }

        // 更新LRU順序
        lruList.erase(cacheMap[key].second);
        lruList.push_front(key);
        cacheMap[key].second = lruList.begin();

        return cacheMap[key].first;
    }

    void put(K key, V value) {
        if (cacheMap.find(key) != cacheMap.end()) {
            lruList.erase(cacheMap[key].second);
        } else if (cacheMap.size() >= capacity) {
            cacheMap.erase(lruList.back());
            lruList.pop_back();
        }

        lruList.push_front(key);
        cacheMap[key] = {value, lruList.begin()};
    }
};

int main() {
    LRUCache<int, std::string> cache(2);

    cache.put(1, "Hello");
    cache.put(2, "World");

    std::cout << cache.get(1) << std::endl; // Output: Hello

    cache.put(3, "Hi");

    std::cout << cache.get(2) << std::endl; // Output: World (被移除)
    std::cout << cache.get(3) << std::endl; // Output: Hi

    return 0;
}

在以上代碼中,我們定義了一個LRUCache類,其中使用std::map作為緩存存儲數據,使用std::list作為LRU鏈表用于維護最近訪問順序。LRUCache類提供了get和put兩個方法,分別用于獲取和存儲數據。同時使用紅黑樹的特性,保證了數據的快速查找和LRU緩存的實現。

這是一個簡單的示例代碼,實際中可以根據具體需求進一步完善和優化。

0
杭州市| 石泉县| 梓潼县| 扶绥县| 白朗县| 怀集县| 伊春市| 左贡县| 邵武市| 玛多县| 淮阳县| 霸州市| 通城县| 葫芦岛市| 禄丰县| 陇川县| 舟山市| 成都市| 江都市| 祁东县| 喀喇| 潼关县| 札达县| 景洪市| 白朗县| 玉龙| 聂拉木县| 尼勒克县| 福州市| 安吉县| 和林格尔县| 沙坪坝区| 云阳县| 高密市| 色达县| 金坛市| 昌黎县| 秭归县| 寻甸| 海宁市| 会泽县|