richardchien / ctreemap

A TreeMap in C.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CTreeMap

License

适用于 C/C++ 的 TreeMap,用 search.h 中的二叉搜索树相关函数实现,使用宏来实现「伪泛型」,生成不同类型的 TreeMap 和相关函数(TreeMap.h 里默认生成了一个 TreeMap 类型,允许存储类型为 void * 的变量,也即任何指针类型)。

用法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "ctreemap/TreeMap.h"

// 下面的宏调用会生成类型 StrMap (存储 char * 类型数据) 以及相关函数
GENERATE_MAP_TYPE(StrMap, char *)

void release_value_callback(StrMap_Entry *e) {
    printf("release_value_callback, key: %s, value: %s\n", e->key, e->value);
    free(e->value);
}

void foreach_callback(const StrMap_Entry *e) {
    printf("foreach_callback, key: %s, value: %s\n", e->key, e->value);
}

int main() {
    StrMap *map = new_StrMap(release_value_callback); // 如果存储的数据类型不需要释放内存, 这里 release_value_callback 可以为 NULL
    
    map->put(map, "key", strdup("hello"));
    map->put(map, "key", strdup("hello2"));
    printf("get, key: %s, value: %s\n", "key", map->get(map, "key"));
    map->remove(map, "key");
    printf("get, key: %s, value: %s\n", "key", map->get(map, "key"));
    map->put(map, "key", strdup("hello"));
    map->put(map, "key11", strdup("hello11"));
    map->put(map, "key21", strdup("hello21"));
    map->put(map, "key31", strdup("hello31"));
    map->put(map, "key41", strdup("hello41"));
    map->clear(map);

    map->put(map, "key1", strdup("hello1"));
    map->put(map, "key2", strdup("hello2"));
    map->put(map, "key3", strdup("hello3"));
    map->put(map, "key4", strdup("hello4"));
    map->foreach(map, foreach_callback);

    delete_StrMap(&map);
}

如果不需要生成存储固定类型的 Map,可以直接用默认的 TreeMap 类型,只不过在使用时需要对 void * 做类型转换。

About

A TreeMap in C.

License:MIT License


Languages

Language:C 97.8%Language:CMake 2.2%