これは私の仕事ですが、家の仕事ではありません。私はネイティブデータ構造を使用して持っているデータを表現する最善の方法を決定しようとしています (ネイティブとは、C++ で STL を使用できないことを意味します。これは C++ コードです。STL を使用しないという設計上の決定は、方法がありません。変更するか違反します)
データは次のとおりです。
192.168.10.77 (これは 192.168.10.77 から一意に取得される int に格納されているとしましょう) という ipaddr を示す 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{ }
た]