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

溫馨提示×

溫馨提示×

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

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

C++中Hash表與哈希表實現

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

在C++中,哈希表(Hash Table)是一種數據結構,它提供了快速的插入、刪除和查找操作

以下是一個簡單的C++哈希表實現示例:

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>

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

    void insert(int key) {
        if (num_elements >= table.size() * 0.75) {
            resize();
        }

        size_t index = hash(key);
        for (auto& entry : table[index]) {
            if (entry.first == key) {
                return; // Key already exists, do not insert
            }
        }

        table[index].push_back({key, true});
        num_elements++;
    }

    bool remove(int key) {
        size_t index = hash(key);
        for (auto it = table[index].begin(); it != table[index].end(); ++it) {
            if (it->first == key) {
                table[index].erase(it);
                num_elements--;
                return true;
            }
        }
        return false; // Key not found
    }

    bool search(int key) const {
        size_t index = hash(key);
        for (const auto& entry : table[index]) {
            if (entry.first == key) {
                return true;
            }
        }
        return false; // Key not found
    }

private:
    std::vector<std::list<std::pair<int, bool>>> table;
    size_t num_elements;

    size_t hash(int key) const {
        return std::hash<int>{}(key) % table.size();
    }

    void resize() {
        size_t new_size = table.size() * 2;
        std::vector<std::list<std::pair<int, bool>>> new_table(new_size);

        for (const auto& bucket : table) {
            for (const auto& entry : bucket) {
                size_t new_index = std::hash<int>{}(entry.first) % new_size;
                new_table[new_index].push_back(entry);
            }
        }

        table = std::move(new_table);
    }
};

int main() {
    HashTable ht(10);
    ht.insert(1);
    ht.insert(11);
    ht.insert(21);

    std::cout << "Search 1: " << ht.search(1) << std::endl; // Output: Search 1: 1 (true)
    std::cout << "Search 11: " << ht.search(11) << std::endl; // Output: Search 11: 1 (true)
    std::cout << "Search 21: " << ht.search(21) << std::endl; // Output: Search 21: 1 (true)
    std::cout << "Search 31: " << ht.search(31) << std::endl; // Output: Search 31: 0 (false)

    ht.remove(11);
    std::cout << "Search 11 after removal: " << ht.search(11) << std::endl; // Output: Search 11 after removal: 0 (false)

    return 0;
}

這個示例實現了一個簡單的哈希表,使用std::vectorstd::list來存儲數據。哈希函數使用C++標準庫中的std::hash。當哈希表的元素數量達到容量的75%時,會自動調整哈希表的大小。

向AI問一下細節

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

c++
AI

罗甸县| 扎鲁特旗| 瑞金市| 区。| 辽阳县| 五河县| 汾西县| 且末县| 扬中市| 阜南县| 聂拉木县| 玉林市| 多伦县| 潼南县| 娄烦县| 华池县| 海城市| 临朐县| 正蓝旗| 密山市| 梁山县| 清丰县| 邵东县| 台山市| 钟祥市| 河池市| 宣恩县| 兴国县| 内黄县| 绥棱县| 广平县| 阳泉市| 大港区| 定结县| 田林县| 平遥县| 九龙坡区| 澄迈县| 高要市| 青浦区| 周至县|