C++STL

《STL源码剖析》笔记:hash_table

2017-09-25  本文已影响69人  wayyyy

SGI中的STL中的hash_map和hash_set底层实现是用hash_table。

hash_table

hash_table是采用开链法实现哈希表。

hash_table.jpg
template <typename Key>
class hash_table {
    ......
        typedef HashtableSetNode<Key> node;
    priavte:
        Vector<node *> buckets;
        size_type num_elements;    // 元素总个数,用于size()
    .....
}

由一个Vector保存每个list。

hash_table节点

hash_table节点.jpg
template <typename Key>
struct HashtableSetNode {
    Key key;
    HashtableSetNode* next;
};

hash_table迭代器

hash_table迭代器类型是forward_iterator,只有++,没有--后退的操作,也没有定义逆向迭代器。关于迭代器类型:《STL源码剖析》笔记:迭代器

template <typename Key>
struct HashTableSetIterator {
    ......
    typedef HashtableSetNode<Key> node;

    node* cur;                  // 迭代器目前所指向的结点
    HashTableSet<Key>* ht;      // 保持对容器的连接能力,因为需要从一个桶跳到另一个桶
}

上一篇下一篇

猜你喜欢

热点阅读