簡體   English   中英

如何在C ++中使用Google Protobuf Map?

[英]How to use Google Protobuf Map in C++?

我試圖在C ++中使用新的protobuf Map功能。

以下是在Ubuntu 14.04上使用gcc 4.9.2 C ++ 14和protobuf 3.0.0-alpha-4完成的:

消息定義:

message TestMap {
     map<string,uint64> map1 = 1;
}

然后,我嘗試編譯以下示例程序:

auto test = debug::TestMap::default_instance();
auto map = test.mutable_map1();
string key = "key";
uint64 val = 20;
map[key] = val;

使用[]語法處理地圖對std :: unordered_map完全正常。 但protobuf實現總是會產生以下編譯器錯誤:

error: no match for ‘operator[]’ (operand types are ‘google::protobuf::Map<std::basic_string<char>, long unsigned int>*’ and ‘std::string {aka std::basic_string<char>}’)

我不明白為什么不知道這個運算符,因為清楚地找到了頭文件google :: protobuf :: Map ,這應該是一個基本的操作。

你知道這里出了什么問題嗎? 我歡迎使用新的protobuf地圖的任何例子,因為我在研究了幾個小時之后沒有找到任何在線。

正如Pixelchemist指出的那樣,問題是map是一個指針,因此[]運算符不起作用。

因此,需要首先取消引用指針。 *map[key]也不起作用,因為編譯器先解析[]然后再解析* 以下工作:

(*map)[key] = val;

雖然這是一個非常基本的問題,但這代表了C ++和Protocol Buffers的良好學習機會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM