C中具有不同数据类型的键值

时间:2019-07-20 12:44:58

标签: c dictionary struct hashmap

我正在使用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?
};

1 个答案:

答案 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),以便您可以对密钥进行操作。