2013-07-14 92 views
0

我想知道是否可以使用帶有Google協議緩衝區的地圖。 我現在有這樣的事情在我的.proto文件使用Google協議緩衝區的std :: map <int,std :: string>

message MsgA 
{ 
required string symbol = 1 ; 
optional int32 freq = 2 [default = 0]; 
} 

message MsgB 
{ 

    //What should I do to make a map<int,MsgA> 
} 

我的問題是在MSGB我想創建一個類型,這將是一個地圖:: 上我怎麼能做到這一點的任何建議?

回答

2

這樣做:

message MapEntry 
{ 
    required int32 mapKey = 1; 
    required MsgA mapValue = 2; 
} 

message MsgB 
{ 
    repeated MapEntry = 1; 
} 

您必須編寫自己的代碼到地圖轉換和從MSGB,但應該是基本上微不足道。

+0

感謝您的回覆。我正在考慮用矢量替換地圖。爲此,我將使用重複字段。我相信它會像一個矢量。你能告訴我如何將項目添加到C++中的重複字段 – MistyD

+0

@MistyD:使用MapEntry&newMapEntry = myMsgB.add_mapentry();'。然後填寫'newMapEntry'中的字段,該字段現在是對消息b中新添加的映射條目的引用。 –

+0

我正在通過https://developers.google.com/protocol-buffers/docs/cpptutorial查看。它不是假設是'MapEntry * newMapEntry = myMsgB.add_mapentry();'?一個指針而不是參考? – MistyD