首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言中的字符串/整数关联

C语言中的字符串/整数关联
EN

Stack Overflow用户
提问于 2014-06-05 19:16:27
回答 4查看 208关注 0票数 0

对于下面的问题,我想用c语言给出一个建议:

我需要字符串和整数之间的关联,如下所示:

代码语言:javascript
运行
复制
"foo" => 45,
"bar" => 1023,
 etc...

并且能够使用相关联的整数找到该字符串,并且能够使用相关联的字符串找到该整数。对于字符串到整数,我可以使用哈希表,但我将失去返回的方法。

我使用的简单解决方案是创建一个表: static bar params [] ={{ "foo",45 },{“param_t”,1023 },... };然后使用两个函数比较每个条目(字符串或整数),以获得字符串或整数。这就是线性搜索,它非常慢。我可以使用什么来使用O(1)中的搜索算法来查找字符串和O(字符串的大小)来查找整数?有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2014-06-05 19:39:31

最简单的方法是实现查找表,最好是按整数值(“主键”)排序。

代码语言:javascript
运行
复制
typedef enum
{
  FOO_INDEX,
  BAR_INDEX,
  ...  
  N
} some_t;

const int int_array [] =  // values sorted in ascending order, smallest first
{
  45,
  1023,
  ...
};

const char* str_array [] =
{
  "foo",
  "bar",
  ...
};

现在,您可以使用int_array[FOO_INDEX]str_array[FOO_INDEX]来获取所需的数据。

由于这些表是在编译时设置的常量表,因此可以对数据进行排序。然后,所有的查找都可以用二进制搜索O(log )完成。如果您有整数值,但需要知道索引,请在int_array上执行二进制搜索。一旦你找到了索引,你就可以从那里得到即时的查询。

为此,两个数组必须具有完全相同的N大小。要确保数组大小和这些数组中的数据完整性,请使用编译时断言:

代码语言:javascript
运行
复制
static_assert(sizeof(int_array)/sizeof(*int_array) == N, "Bad int_array");
static_assert(sizeof(str_array)/sizeof(*str_array) == N, "Bad str_array");
票数 2
EN

Stack Overflow用户

发布于 2014-06-05 19:29:58

首先使用qsort对列表进行排序,然后使用bsearch查找项目。它不是O(1),但至少是O(log(n))。

票数 0
EN

Stack Overflow用户

发布于 2014-06-05 19:50:21

使用两个哈希图。一个用于从整数到字符串的关联,另一个用于从字符串到整数的关联。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24058784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档