其他分享
首页 > 其他分享> > 力扣(leecode)刷题中使用到的哈希表UThash是什么

力扣(leecode)刷题中使用到的哈希表UThash是什么

作者:互联网

在leecode刷题的时候经常看到用到哈希表的官方题解中都是直接调用UThash,可以用来检测是否有重复元素出现。这其实是一个在GitHub上开源的非常优秀的对哈希表的实现。
下载地址:https://github.com/troydhanson/uthash
下载下来是一个压缩包,里面只有一个文件夹uthash-master,随便解压缩到一个能找到的地方。打开它,打开里面的src文件夹然后把这个路径复制下来。
在这里插入图片描述
我这里复制出来的路径就是C:\Users\11543\Desktop\CS\uthash-master\src
之后打开VS2010(其他版本也类似)新建项目之后找到“项目-属性”

在这里插入图片描述
在打开的页面里点击“配置属性——VC++目录——包含目录——右边的小三角——编辑”

在这里插入图片描述
在新打开的页面里点击“新行”,然后把刚刚复制的路径粘贴进输入框中,点击右下角确定就ok了。(或者在输入框右边有三个点,点开那个然后就在里面定位到uthash-master——src目录中点击选择文件夹。)

在这里插入图片描述
这样就算配置完成了,在代码中直接输入include“uthash.h”就可以使用了。(这里我的代码是“217.寻找重复元素”中官方题解的代码)

在这里插入图片描述
下面是最最基本的用法。
完整用法可以参考

  1. 官方英文使用文档:http://troydhanson.github.io/uthash/userguide.html#_add_item
  2. 一篇对这个文档的翻译博客https://blog.csdn.net/fan_h_l/article/details/107241520

或者找其他写的比较好的博客学习

就对应着上面的那段代码来简单说一下用法

首先需要创建一个结构体

struct hashTable {
    int key;
    UT_hash_handle hh;
};

UT_hash_handle hh;
这行代码是用来表明这个结构体是一个哈希表类型,照抄就可以。
key就是你想存储的数据,什么类型都可以(只是我目前只用过int类型)。
另外在使用时必须先定义一个该结构体的空指针,用于指向保存数据的hash表(官方文档原文,没看懂)。一定要置为空,名字随便起,后面有用。

struct hashTable* set = NULL;

查找:

struct hashTable* tmp = NULL;
HASH_FIND_INT(set, nums + i, tmp);

HASH_FIND_INT();

插入:

tmp = (struct hashTable*)malloc(sizeof(struct hashTable));
tmp->key = nums[i];
HASH_ADD_INT(set, key, tmp);

HASH_ADD_INT();

注意,必须先确保哈希表里没有相同元素才能插入,UThash不会替你完成这件事。也就是说你必须先用查找功能保证没有了才能插入(这也是正常使用中要自定义函数接口的意义)。

这道题中就只用到了这两个功能,就先只介绍这两个功能。

标签:tmp,哈希,力扣,leecode,hashTable,key,uthash,struct
来源: https://blog.csdn.net/HowToLearnJava/article/details/121546906