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