Skip to content

EASTL 侵入式容器与哈希表

源码路径:references/impl/EASTL/include/EASTL/intrusive_list.h, internal/hashtable.h

侵入式容器

侵入式容器要求元素自身包含链表节点:

cpp
struct Task : public eastl::intrusive_list_node {
    int id;
    std::string name;
};

eastl::intrusive_list<Task> task_list;
Task t1{1, "build"}, t2{2, "test"};
task_list.push_back(t1);  // 零分配
task_list.push_back(t2);

优势:零堆分配、数据和链表指针在同一对象内(缓存友好)、不需要额外节点管理。

哈希表

EASTL 的哈希表使用开放寻址 + 线性探测:

cpp
// hashtable.h 中的 bucket 结构
struct node {
    node* next;      // 链式溢出
    hash_node hash_data;  // key + value
};

// 桶数组
node** mpBucketArray;  // 指针数组
size_t mnBucketCount;
size_t mnElementCount;

EASTL 的 hash_maphash_set 支持侵入式版本(intrusive_hash_mapintrusive_hash_set),元素自带哈希值和链表指针。

红黑树

EASTL 的有序容器(mapset)基于 red_black_treeinternal/red_black_tree.h),实现与标准库类似但无异常处理。

基于 MIT 许可发布