オープンソースライブラリ「uthash.h」の使用方法レコード
「uthash.h」はハッシュテーブルに関する非常に使いやすいC言語のオープンソースライブラリであり、この使用方法を記録します.
「uthash.h」はGitHubから直接クローンを使えばいいです.
使用時#include“uthash.h”でOKです.
次に、関連関数の使用方法について重点的に説明します.
まず、構造体が必要です.
keyとvalueのタイプは変えられますが、hhというハンドルは必要です.
挿入:
keyのタイプに応じて異なる関数を使用します.
int:HASH_ADD_INT
文字列:HASH_ADD_STR
pointer: HASH_ADD_PTR
その他のタイプ:HASH_ADD
前のいくつかは実質的に最後のHASHを呼び出した.ADD.
例:
検索:
同じように、タイプによって異なる関数を使用します.
例えばkeyはint:HASH_FIND_INT
使いやすいように、keyに基づいて検索した関数を自分で書いて、構造体ポインタを返すことができます.
「uthash.h」はGitHubから直接クローンを使えばいいです.
使用時#include“uthash.h”でOKです.
次に、関連関数の使用方法について重点的に説明します.
まず、構造体が必要です.
struct hash_table{
int key;
int value; //any type
UT_hash_handle hh; //necessary
};
typedef struct hash_table* hash_ptr;
keyとvalueのタイプは変えられますが、hhというハンドルは必要です.
挿入:
keyのタイプに応じて異なる関数を使用します.
int:HASH_ADD_INT
文字列:HASH_ADD_STR
pointer: HASH_ADD_PTR
その他のタイプ:HASH_ADD
前のいくつかは実質的に最後のHASHを呼び出した.ADD.
例:
hash_ptr elem, table = NULL; //table ,elem
//table NULL
elem = (hash_ptr)malloc(sizeof(struct hash_table));
elem->key = mykey;
elem->value = myvalue;
HASH_ADD_INT(table, key, elem); // key
検索:
同じように、タイプによって異なる関数を使用します.
例えばkeyはint:HASH_FIND_INT
使いやすいように、keyに基づいて検索した関数を自分で書いて、構造体ポインタを返すことができます.
hash_ptr find_node(hash_ptr table, int key)
{
if(!table)
return NULL;
hash_ptr s;
HASH_FIND_INT(table, &key, s);
return s;
}