EASTL和SGI哈希表的实现
EASTL and SGI Hashtable implemenation
在这两种实现中,容器都存储了node_type
的原始数组,它本质上是一个存储类型T
的简单链表。
// From SGI
template <class _Val>
struct _Hashtable_node
{
_Hashtable_node* _M_next;
_Val _M_val;
};
出于教育原因,我正在实现我自己的版本,我想知道他们为什么不使用std::list<>
容器来放置水桶?为什么要编写std::list<>
中已经存在的代码?
我遇到的一个原因可能是std::list<>
是双重链接的,所以浪费了空间。但是如果使用一个单独的链表呢?为什么不给bucket_type
一个模板参数,这样它就可以更改了?
在这些实现中不为bucket使用列表类[template]的原因是它们没有单链列表,而std::list<T>
是双链接的:不必要的返回指针在运行时和大小方面的额外成本将被认为是不好的。C++2011现在有了std::forward_list<T>
,这几乎是出于在散列容器中使用它的愿望。这可能会引发一个问题:为什么他们当时没有添加一个单链表?这个问题的答案也很简单:一个单独链接的列表不能满足标准的容器要求,只能留待以后做出适当的选择。
相关文章:
- C++哈希表中,两个相同的实现,但一个给出错误
- 使用哈希表设置实现
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 实现将字符串映射到 C++ 中的数组的哈希表。我一直在"Debug Assertion Failed",我不知道为什么
- 如果我们使用链表数组来实现哈希表,则可以以不需要遍历的方式实现"add"。这是真的还是假的?
- 使用链哈希实现动态哈希表
- 在C++中实现哈希表(插入和延迟删除)
- 如何用tbb实现一个将键映射到不同类型值的并发哈希表
- 如何实现哈希表的擦除函数
- 标准库在实践中如何实现哈希表
- 使用链表数组实现哈希表
- 实现哈希表(rehash范围错误)
- 如何实现一个具有2个键的哈希表
- 哈希表-哈希函数的实现
- 用C++实现哈希表冲突的避免与解决
- 实现哈希表
- 在c++中实现哈希表
- 实现哈希表,插入函数导致"scope"错误
- 在c++中使用unordered_map实现哈希表并处理冲突