【发布时间】:2016-05-01 17:15:45
【问题描述】:
我正在使用 C 编程语言并想问这个简单的问题。假设我有这样的数据结构:
typedef struct {
char* tag;
char* name;
unsigned int id;
} object;
在其他语言中,您可以创建一个包含键和值对的哈希图,然后将它们放入其中。 C 没有内置的 hashmap,但我想我可以去使用一些第三方 hashmap 库,但这对我的用例来说可能有点过头了。
基本上,我希望有一些方法可以通过标签或 id 访问其中一些;有了一个数组或指针以及这个数组大小的变量,我几乎可以添加到列表中,按 id 或标签排序,或者在没有第三方库的情况下在 C 中做很多我想做的事情。
typedef struct {
object** objects;
unsigned int count;
} object_bag;
添加简单的功能,没有重复检查等......
void add_object(object* obj) {
int count = objects->count++;
objects[count] = calloc(1,sizeof(object*));
objects[count] = obj;
}
在这种情况下,是否有任何理由使用哈希图?这不是性能优化问题,我也很好奇,但在某个时候这种数据结构会变得比哈希图更麻烦吗?
【问题讨论】:
-
如何使用这种方法通过标签/名称访问?
-
使用地图的要点是给定其密钥的恒定时间访问。这完全取决于您需要如何访问您的数据
-
还要注意你的内存分配不正确
-
取决于您必须管理的数据量,但如果没有那么多对象,那么一个简单的数组,具有基本管理,即使没有对元素进行排序也可能很有用。不要尝试过早的优化,使用一些轻量级的抽象,这样之后你就可以使用更复杂的高效结构。