我正在使用c,并且正在尝试在C中实现一个dictionary(key,value)对,但是我拥有的键列表来自该类型中的不同类型,例如(int x。double y,char z)结构中的键和值的类型是什么?
更新:其主要目的是将所有变量的值存储在特定程序中(我需要具有var:val的字典)
在C语言中有可能吗?
struct key_value
{
char key; // what is the type of key?
int value; // what is the type of value?
};
答案 0 :(得分:0)
主要目的是将所有变量的值存储在特定程序中
由于只有您的图书馆用户才知道密钥是什么,密钥的存储方式以及如何进行比较,因此用户应传递其自身的函数并回调以使用密钥。
struct map_s {
/* some data for the map */
int (*key_cmp)(void *key1, void *key2);
};
struct key_value {
void *key;
int value; // what is the type of value?
};
或者您可以将函数指针放在struct key_value
内,具体取决于您希望实现的外观如何。然后,您的库可以调用用户提供的比较函数,以了解密钥是否是此密钥。
int map_find_value(struct map_s *map, void *key) {
for (struct key_value *iterator /* iterate over key_values here */ ) {
if (map->key_cmp(key, iterator->key)) {
return iterator->value;
}
}
}
如果您的图书馆不知道密钥是什么,则不应对此做任何假设-然后让您的图书馆用户来处理它。
根据您的库实现,您可能还希望传递一个函数指针,该指针将破坏/释放像ex这样的键。 void (*key_destruct)(void *key)
和ex。将复制密钥,例如int (*key_copy)(void **to, void *from)
,以便您可以对密钥进行操作。