gpt4 book ai didi

c - C中的结构数组索引

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:49 25 4
gpt4 key购买 nike

我想以这种方式定义结构数组,以便可以轻松执行搜索操作并可以使用枚举值检索字符串。

例如:

enum MY_ENUM { 
MY_ENUM_VAL = 0,
MY_ENUM_VAL_8 = 8,
MY_ENUM_VAL_50 = 50,
MY_ENUM_VAL_200 = 200,
MY_ENUM_VAL_565 = 565,
};

struct my_struct {
int val;
char *str;
};


/* Struct array */
struct my_struct my_struct_array[] = {
{ MY_ENUM_VAL, "str0" },
{ MY_ENUM_VAL_8, "str8" },
{ MY_ENUM_VAL_50, "str50" },
{ MY_ENUM_VAL200, "str200" },
{ MY_ENUM_VAL_565, "str565" },
};

这样定义数组的优点是我可以进行搜索操作,而且如果我在数组中找不到任何值,那么我可以分配一些默认值。但是,如果我想使用像

这样的枚举值来查找一些字符串怎么办?
char *str50 = my_struct_array[MY_ENUM_VAL50].str; // this won't work.

如果我像下面这样基于枚举值进行索引,那么我将无法进行搜索操作。另外,如果我有一些像 300 这样的随机值,我可能会得到一些垃圾值。

/* String array */
const char *my_string_array[] = {
[MY_ENUM_VAL] = "str0",
[MY_ENUM_VAL_8] = "str8",
[MY_ENUM_VAL_50] = "str50",
[MY_ENUM_VAL200] = "str200",
[MY_ENUM_VAL_565] = "str565",
};

定义数组的最佳/最优方法是什么才能实现上述两个操作?

最佳答案

快速搜索不是一项微不足道的操作。 C 语言没有提供简单的方法来处理(键,值)映射,例如 C++ 中的 std::mapstd::unordered_map 或Python 中的 dict。您只能使用标准库中的函数。 C99 定义了 bsearch 允许在排序的数组中进行二分法搜索,Posix 定义了 lsearch(线性搜索)和 hsearch(直接使用 key hash 访问).或者在普通的单个 C 中,扫描数组以查找您的 key 。

关于c - C中的结构数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47839500/

25 4 0
文章推荐: javascript - 谷歌地图不显示在 HTML
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com