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

时间:2012-01-27 15:56:53

标签: c arrays multidimensional-array data-structures

我需要的是类似于数组但是对于随机数而不是(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]将返回字符串/数据

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

使用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被“重新循环”。学生被删除。

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