将Char *映射到两个整数

时间:2018-06-30 01:20:13

标签: c dictionary hashmap

我正在寻找将字符串映射到两个整数并将这些整数映射到字符串的最快方法。

这是每个元素的结构:

  • 字符*名称
  • uint32_t license_id
  • uint32_t ss_id

每个字段都是唯一的,所有字段都是常量,并且在编译后不会添加任何元素。因为它们是唯一的,所以我想做以下搜索功能:

uint32_t get_license_from_name(char *name);
uint32_t get_ssid_from_name(char *name);
void get_name_from_license(uint32_t license, char *name);
void get_name_from_ssid(uint32_t ssid, char *name);

通过搜索,我知道可以为每对搜索词创建一个单独的哈希图。 这是我最好的选择吗?我希望我可以利用这些值始终为人们所了解的事实,这与我发现的其他问题不同。

是否有O(1)解决此问题的方法?

2 个答案:

答案 0 :(得分:0)

仅使用由二叉树实现的一组怎么样?

Key:
     {name, license, ssid}

Function Compare:

     name_compare(name1, name2) || license_compare(license1, license2) || ssid_compare(ssid1, ssid2)

这是O(logN)搜索。

答案 1 :(得分:0)

提供有关值的一些细节将很有用。如果值最初是整数,并且已经转换为字符数组以进行传输,则可以通过将其强制转换为int来解决问题。否则,最好的选择是使用stdlib.h函数,例如atoi()和atoc()。

根据您的示例代码,您似乎正试图从同一个char数组中提取两个值。如果是这种情况,我建议像这样使用memcpy()。

/* Based on what you wrote above I am assuming name is 8 bytes  */
int firstValueSize = 4/* whatever size in bytes the first number should be */;
int secondValueSize = 4/* Same with this */;
int *firstValue = (int)malloc(sizeof(int));
int *secondValue = (int)malloc(sizeof(int));
memcpy(firstValue, name, sizeof(firstValueSize));
memcpy(secondValue, name + firstValueSize, sizeof(secondValueSize));

如果它们最初是整数,则应该可以使用。否则,您将不得不使用上述功能。