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

溫馨提示×

溫馨提示×

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

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

C++中Hash表擴容機制

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

在C++中,哈希表(Hash Table)是一種非常重要的數據結構,它提供了快速的插入、刪除和查找操作。然而,當哈希表中的元素數量增加到一定程度時,為了保持操作的效率,我們需要對哈希表進行擴容。下面是一個簡單的C++哈希表擴容機制的實現:

  1. 首先,定義一個哈希表類(HashTable):
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>

class HashTable {
public:
    HashTable(size_t size);
    ~HashTable();

    void insert(int key);
    bool remove(int key);
    bool search(int key) const;

private:
    struct Entry {
        int key;
        bool occupied;
        Entry() : occupied(false) {}
    };

    size_t size_;
    size_t capacity_;
    std::vector<std::list<Entry>> table_;

    size_t hash(int key) const;
    void rehash(size_t new_capacity);
};
  1. 實現哈希表類的構造函數和析構函數:
HashTable::HashTable(size_t size) : size_(0), capacity_(size), table_(size) {}

HashTable::~HashTable() {}
  1. 實現插入操作:
void HashTable::insert(int key) {
    if (search(key)) {
        return;
    }

    size_t index = hash(key);
    for (auto& entry : table_[index]) {
        if (!entry.occupied) {
            entry.key = key;
            entry.occupied = true;
            size_t new_capacity = capacity_ * 2;
            rehash(new_capacity);
            return;
        }
    }

    table_[index].push_back({key, true});
    size_t new_capacity = capacity_ * 2;
    rehash(new_capacity);
}
  1. 實現刪除操作:
bool HashTable::remove(int key) {
    size_t index = hash(key);
    for (auto it = table_[index].begin(); it != table_[index].end(); ++it) {
        if (it->key == key) {
            it->occupied = false;
            size_t new_capacity = capacity_ / 2;
            rehash(new_capacity);
            return true;
        }
    }
    return false;
}
  1. 實現查找操作:
bool HashTable::search(int key) const {
    size_t index = hash(key);
    for (const auto& entry : table_[index]) {
        if (entry.key == key) {
            return true;
        }
    }
    return false;
}
  1. 實現哈希函數和擴容操作:
size_t HashTable::hash(int key) const {
    return key % capacity_;
}

void HashTable::rehash(size_t new_capacity) {
    std::vector<std::list<Entry>> new_table(new_capacity);
    for (const auto& bucket : table_) {
        for (const auto& entry : bucket) {
            if (entry.occupied) {
                size_t new_index = hash(entry.key);
                new_table[new_index].push_back(entry);
            }
        }
    }

    capacity_ = new_capacity;
    table_ = std::move(new_table);
}

這個簡單的實現中,當哈希表的負載因子(已存儲元素數量與總容量的比值)超過0.5時,就會觸發擴容操作。擴容操作會將哈希表的總容量加倍,并將所有元素重新插入新的哈希表中。這樣可以確保哈希表的性能在元素數量增加時保持在一個較高的水平。

向AI問一下細節

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

c++
AI

云南省| 天峨县| 称多县| 依兰县| 高陵县| 延长县| 巫山县| 昭觉县| 临桂县| 韶关市| 无为县| 华安县| 家居| 子长县| 凯里市| 民权县| 宁海县| 化隆| 岑溪市| 商城县| 青铜峡市| 齐河县| 林芝县| 霞浦县| 兴隆县| 颍上县| 凤凰县| 桃园市| 鄂尔多斯市| 巴里| 日土县| 丹阳市| 偏关县| 怀安县| 宜丰县| 保康县| 罗田县| 句容市| 和田县| 望城县| 游戏|