表类型
protobuf语言的maps字段类型相当于C++语言的std::map类型
工程目录结构
1$ ls proto/ 2sample_maps.proto
proto文件
1$ cat proto/sample_maps.proto 2syntax = "proto3"; 3 4message home 5{ 6 string addr = 1; 7} 8 9message sample_maps 10{ 11 map<int32, string> ids = 1; 12 map<string, home> infos = 2; 13}
读写源文件
1$ cat reader.cpp 2#include <fstream> 3#include <iostream> 4#include "sample_maps.pb.h" 5 6using namespace std; 7 8int main(int argc, char *argv[]) 9{ 10 fstream input("./log", ios::in | ios::binary); 11 cout << "Deserialize start." << endl; 12 13 sample_maps m; 14 if (!m.ParseFromIstream(&input)) 15 { 16 cout << "Deserialize failed." << endl; 17 return -1; 18 } 19 20 auto ids = m.ids(); 21 for (auto iter = ids.cbegin(); iter != ids.cend(); iter++) 22 cout << iter->first << " : " << iter->second << endl; 23 24 auto infos = m.infos(); 25 for (auto iter = infos.cbegin(); iter != infos.cend(); iter++) 26 cout << iter->first << " : " << iter->second.DebugString(); 27 28 cout << "Deserialize end." << endl; 29 input.close(); 30 return 0; 31} 32 33$ cat writer.cpp 34#include <fstream> 35#include <iostream> 36#include "sample_maps.pb.h" 37 38using namespace std; 39 40int main(int argc, char *argv[]) 41{ 42 sample_maps m; 43 auto ids_ptr = m.mutable_ids(); 44 (*ids_ptr)[1] = "fwd"; 45 (*ids_ptr)[2] = "xb"; 46 47 auto infos_ptr = m.mutable_infos(); 48 home h; 49 h.set_addr("nj"); 50 (*infos_ptr)["fwd"] = h; 51 52 fstream output("./log", ios::out | ios::trunc | ios::binary); 53 cout << "Serialize start." << endl; 54 if (!m.SerializeToOstream(&output)) 55 { 56 cout << "Serialize failed." << endl; 57 return -1; 58 } 59 output.close(); 60 cout << "Serialize end." << endl; 61 return 0; 62}