我曾经用C ++编写代码,现在我尝试用C语言编写。
假设我已经定义了一个struct
struct point{
int x;
int y;
}
A
中是否有可支持以下功能的数据结构c
:
给定两个整数,比如i
和j
,以及两个点,比如p1
和p2
。
A[i][j][p1][p2]
可以唯一确定一个值。
听起来像一个4维阵列。但是,索引不再是int,而是用户定义的struct
。
答案 0 :(得分:21)
你可能需要制作自己的结构。 Kernighan和Ritchie的C编程语言有一个用c制作关联地图的例子,下面我详细介绍的是基于我记得的内容。
基本上,您需要一个包含struct Key 和struct Value 的结构 Map 。
struct Map {
struct Key key;
struct Value value;
};
struct 键包含确定值的元素(在您的情况下为2点和2个整数)
struct Key {
struct point p1;
struct point p2;
int i;
int j;
};
struct 值是您希望密钥指向的任何内容(您没有说过)
您现在有一个结构地图,它将您的四个输入与一个值相关联,但单个地图并不是很有用。你会想要一大堆它们。
struct Map map[SIZE_OF_MAP];
如果您不想线性搜索数组以寻找您正在寻找的地图结构,您可以创建一个哈希函数,直接将它带到它。只需定义一个接受键的函数,并使用其值为数组中的索引赋值。使用哈希将 Map 放入数组中并从数组中检索它。 (注意:我不确定这是否是正确的散列示例,如果完全错误,请更正)
int get_hash(Key *key)
{
int result;
/* combine all inputs in some way */
result = key->i * key->i + (key->p1.x * key->p1.x) - (key->p2.x * key->p2.x)
/* make sure result isn't out of bounds of the array */
return (result % SIZE_OF_MAP);
}
如果使用散列函数,则必须考虑碰撞(当两个键为 get_hash 提供相同结果时会发生什么)。当您使用地图数组时,您需要某种形式的碰撞解决方案。