2

这是我的工作,但不是家庭工作。我正在尝试决定如何最好地使用本机数据结构来表示我拥有的数据(本机我的意思是我不能在 C++ 中使用 STL,它是 C++ 代码。它是我们的设计决定不使用 STL 并且没有办法改变它或违反它)

数据如下:

有一个变量 say int 来表示 ipaddr 比如说 192.168.10.77(假设它存储在一个从 192.168.10.77 唯一获得的 int 中),它可以调用 deviceId。

现在,对于每个这样的 deviceId,还有其他字段与多个服务相关联,例如服务 1、服务 2 等... 与每个设备关联的服务数量从一个 deviceId 到另一个是可变的。

因此,数据样本可能如下所示:

192.168.10.77 

    service1

    service2

    service3

    service4

192.168.10.98

    service1

    service2

192.168.10.97

    service1

现在我将它存储在一个低效的数据结构中,如下所示。

我有一个结构:

typedef struct
{
   deviceId d;
   serviceId s;
}mystr;

然后我使用一个结构数组,它包含

mystr mylist[64];

所以这个数组的条目看起来像

mylist[0].d = 192.168.10.77

mylist[0].s = service1


mylist[1].d = 192.168.10.77

mylist[1].s = service2

mylist[2].d = 192.168.10.77

mylist[2].s = service3

mylist[3].d = 192.168.10.77

mylist[3].s = service4

mylist[4].d = 192.168.10.98

mylist[4].s = service1

mylist[5].d = 192.168.10.98

mylist[5].s = service2

... ... and so on ....

本质上,deviceId 值的重复次数与与其关联的服务一样多。

我需要一些更高效的东西,因为稍后我必须对与设备关联的所有服务进行分组。

所以要做到这一点,我可能必须搜索 deviceId 并将其服务组合在一起。我不知道如何按 deviceId 进行搜索,因为它可以具有任何值。

使用一些最佳数据结构来表示这些数据的更好方法是什么?

[我可以将其视为链表,但无法提出struct Node{ }它]

4

4 回答 4

2

typedef struct
{ deviceId d;
serviceId s[100];
需要为 1 台设备提供超过 1 项服务

 `}mystr;  

mystr mylist[64];`

或者你可以有一个像这样的链表

` 结构设备 {
设备 ID; *服务; }

 typedef struct serviceid{
 {
   *service;
 }service;

` 通过最后一个服务 ID 指向 null

于 2013-02-25T16:25:11.287 回答
0

考虑使用 gethostbyname 和 gethostbyaddr。先试一个,如果失败,再试另一个。然后你只需要存储一个字符串。

于 2013-02-25T16:28:16.060 回答
0

这个库如何将其存储为基本哈希表?

http://troydhanson.github.com/uthash/

免责声明:我对 C 只是模糊熟悉

于 2013-02-25T16:57:13.720 回答
0

您可以拥有设备链接列表和服务链接列表

typedef Service{
 serviceId s;//store service id
 Service *nextService;//link to the different services supported by the device, end by null
}*deviceServiceList;

typedef struct Device{
 deviceId d;//store the device id
 Service *s;//store the list of service available for this device
}myDevices;

设备可以存储在设备数组中,或者您可以创建设备链接列表

于 2013-02-26T13:41:16.280 回答