Protocol Buffers でマップ型のフィールドを定義するには、map<key_type, value_type>
という形式で型を指定します。
次の SampleMessage
メッセージ型は、string
型のキーと Project
型の値を持つマップフィールドを定義しています。
キーの型 (key_type
) には、整数あるいは文字列 を指定することができます。
浮動小数点数 (float
, double
) やバイトデータ (bytes
) を key_type
にすることはできません。
値の型 (value_type
) としては、ほぼすべての型 を指定できますが、マップ型だけは value_type
にすることはできません。
つまり、マップのマップは表現できないことになるのですが、value_type
として他のメッセージ型を持たせることができるので(上記の例では Project
)、実際にはほぼ同様の情報を表現できます。
あと、あまり困ることはないでしょうが、Protocol Buffers ではマップの配列(リスト)は表現できません(つまり、repeated map<xxx, yyy>
とはできません)。