中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hash算法在C++中實現高性能數據結構

發布時間:2024-11-20 09:31:33 來源:億速云 閱讀:78 作者:小樊 欄目:編程語言

在C++中實現高性能數據結構時,哈希表(Hash Table)是一種非常實用的數據結構

#include <iostream>
#include <vector>
#include <list>
#include <mutex>

class HashTable {
public:
    HashTable(size_t size) : table(size), mutexes(size) {}

    template <typename Key, typename Value>
    bool insert(const Key& key, const Value& value) {
        size_t index = hash(key) % table.size();
        std::lock_guard<std::mutex> lock(mutexes[index]);
        auto& bucket = table[index];
        for (auto& entry : bucket) {
            if (entry.first == key) {
                entry.second = value;
                return true;
            }
        }
        bucket.emplace_back(key, value);
        return true;
    }

    template <typename Key, typename Value>
    bool find(const Key& key, Value& value) const {
        size_t index = hash(key) % table.size();
        std::lock_guard<std::mutex> lock(mutexes[index]);
        const auto& bucket = table[index];
        for (const auto& entry : bucket) {
            if (entry.first == key) {
                value = entry.second;
                return true;
            }
        }
        return false;
    }

    template <typename Key>
    bool remove(const Key& key) {
        size_t index = hash(key) % table.size();
        std::lock_guard<std::mutex> lock(mutexes[index]);
        auto& bucket = table[index];
        for (auto it = bucket.begin(); it != bucket.end(); ++it) {
            if (it->first == key) {
                bucket.erase(it);
                return true;
            }
        }
        return false;
    }

private:
    std::vector<std::list<std::pair<Key, Value>>> table;
    std::vector<std::mutex> mutexes;

    template <typename T>
    size_t hash(const T& value) const {
        std::hash<T> hasher;
        return hasher(value);
    }
};

int main() {
    HashTable ht(10);
    ht.insert("one", 1);
    ht.insert("two", 2);
    ht.insert("three", 3);

    Value value;
    if (ht.find("two", value)) {
        std::cout << "Found: " << value << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    if (ht.remove("two")) {
        std::cout << "Removed 'two'" << std::endl;
    } else {
        std::cout << "'two' not found" << std::endl;
    }

    if (ht.find("two", value)) {
        std::cout << "Found: " << value << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    return 0;
}

這個實現使用了std::vector來存儲桶(bucket),每個桶是一個std::list,用于存儲具有相同哈希值的鍵值對。我們還使用了std::mutex來確保在多線程環境下的線程安全。

這個簡單的實現可以根據需要進行擴展和優化,例如使用開放尋址法解決哈希沖突,或者使用更高效的哈希函數。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

贵港市| 佛冈县| 灵武市| 长汀县| 日照市| 东辽县| 葵青区| 元谋县| 河曲县| 二手房| 孟州市| 赞皇县| 陆丰市| 兴义市| 清徐县| 汉源县| 舟曲县| 葫芦岛市| 津市市| 察隅县| 北宁市| 淮阳县| 丹凤县| 察雅县| 金塔县| 禄丰县| 建瓯市| 锡林浩特市| 虹口区| 丰宁| 壤塘县| 光泽县| 永善县| 偃师市| 外汇| 筠连县| 青龙| 开鲁县| 泌阳县| 汕尾市| 蒲江县|