C 中 2 种数据类型 /MAP 的数组

发布于 2024-12-29 11:39:29 字数 644 浏览 0 评论 0原文

我需要的是类似于数组,但对于随机数而不是(0,1,2,3.....)。 我需要保存一个数字作为索引/键并为其分配一个字符串。

例如学号,然后是姓名 这样我就可以访问 students[number] 并检索他们的姓名。

与下面的代码类似,但它是 C++ 语言,并且使用 ANSI C

std::map <string, char> grade_list;
grade_list["John"] = 'B'

,可以在此处找到: http: //www.cprogramming.com/tutorial/stl/stlmap.html

我似乎无法找到解决 ANSI C 中这个问题的方法。

任何人都可以推荐任何方法来产生这个吗?

编辑:另一点是表的值将被硬编码并且不需要更改,因此它只是一个提供类似于...

name[accesskey] 的访问的方法将返回一个字符串/data

GLIBS 无法工作,因为我使用的是编译器 MINGW32 并且使用它时出现问题。

What I require is similar to array but for random numbers rather than (0,1,2,3.....).
I need to hold a number as the index/key and assign it a string.

For example student number, and then there name
So I could access students[number] and retrieve their name.

Similar to this code below but its in C++ and im using ANSI C

std::map <string, char> grade_list;
grade_list["John"] = 'B'

which was found here: http://www.cprogramming.com/tutorial/stl/stlmap.html

I just cant seem to find away to solve this problem in ANSI C.

Can any one reccommend any way to produce this?

EDIT: Another point is the values of the table will be hard coded and do not required to be change so it's just a method with provides access to similar to...

name[accesskey] would return a string/data

GLIBS wont work because I'm using the compiler MINGW32 and there's problems using it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幻想少年梦 2025-01-05 11:39:29

您可以使用 GLib 哈希表数据结构。

http://developer.gnome.org/glib/2.30/glib-Hash -Tables.html

You can use GLib Hash table data structure.

http://developer.gnome.org/glib/2.30/glib-Hash-Tables.html

一指流沙 2025-01-05 11:39:29

使用struct数组:

typedef struct {
  int  valid;
  char name[32];
} Student;

Student students[100];

/* Initialize an element in the array. */
students[0].valid = 1;
strcpy(students[0].name, "Joe Blow");

然后编写函数来查找第一个未使用的元素,找到后初始化一个元素,依此类推。

如果您想让它更加动态,您可以使用动态数组,可能是这样的:

typedef struct {
  size_t  allocated;
  Student *data;
} StudentRegistry;

然后使用 realloc() 使数组以 data 为根> 在需要时成长。

这一切都假设学生是通过数组中的索引来识别的,这似乎与问题的第一部分(“学生编号”)相匹配。这意味着如果学生被删除,学生 ID 将被“重新循环”。

更新:如果您想选择自己的 ID,而不是使用通过索引隐式“创建”的 ID,那么这种方法并不好。然后我会推荐一个哈希表。我喜欢油嘴滑舌的。

Use an array of struct:

typedef struct {
  int  valid;
  char name[32];
} Student;

Student students[100];

/* Initialize an element in the array. */
students[0].valid = 1;
strcpy(students[0].name, "Joe Blow");

Then write functions to find the first unused element, initializing one after finding it, and so on.

If you want to make it a bit more dynamic, you can instead use a dynamic array, something like this maybe:

typedef struct {
  size_t  allocated;
  Student *data;
} StudentRegistry;

and then use realloc() to make the array rooted at data grow when needed.

This all assumes that students are identified by their indices into the arrays, which seems to match the first part of your question ("student number"). This means student ID:s are "re-cycled" if e.g. a student is deleted.

UPDATE: If you want to choose your own ID:s, rather than use the ones "created" implicitly by indexing, then this approach is no good. I would then recommend a hash table. I like glib's.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文