首页 > 代码库 > 哈希容器的使用

哈希容器的使用

stl的容器库非常强大,但是为了要兼容各种元素类型,采用了模板进行泛化,这样的好处就是使用非常的方便,但是编译器会对使用到的每种类型都进行一遍实例化,用的类型太多的话不仅影响编译速度而且生成的可执行文件也很冗余。

因此,TBOX在设计容器架构的时候,引入tb_item_func_t类型,来设置容器使用的成员类型,这样在实现容器通用性的同时,也不会产生过的冗余,而且容器接口操作上,同样相当的便利。

可以先看个简单使用哈希的例子:

/* 初始化hash, 哈希桶大小8
 * 键:大小写敏感字符串
 * 值:long整型
 */
tb_hash_ref_t hash = tb_hash_init(8, tb_item_func_str(tb_true), tb_item_func_long());
if (hash)
{
    // 设置键值对:"key" => 123
    tb_hash_set(hash, "key", (tb_pointer_t)123);

    // 获取值
    tb_long_t value = http://www.mamicode.com/(tb_long_t)tb_hash_get(hash, "key");> 

怎么样,简单吧。各种类型项都是可以在键值上互用的,而且会去适配tb_hash_get和tb_hash_set等容器接口参数。

你也可以很方便的在初始化容器的时候,自定义成员释放函数、成员比较函数、哈希计算函数等,例如:

// 指针成员释放函数
static tb_void_t tb_hash_item_ptr_free(tb_item_func_t* func, tb_pointer_t buff)
{
    // 断言检测
    tb_assert_and_check_return(func && buff);

    // 获取用户私有数据
    tb_pointer_t priv = func->priv;

    /* 获取成员数据,这里为tb_pointer_t类型,buff是指向成员数据的指针
     *
     * 如果是tb_item_func_str()项类型,数据就是:
     * tb_char_t* data = http://www.mamicode.com/*((tb_char_t**)buff);> 

  • TBOX项目详情
  • TBOX项目源码
  • TBOX项目文档

哈希容器的使用