zoukankan      html  css  js  c++  java
  • ProtoBuf练习(五)

    表类型

    protobuf语言的maps字段类型相当于C++语言的std::map类型

    工程目录结构

    $ ls proto/
    sample_maps.proto
    

    proto文件

    $ cat proto/sample_maps.proto
    syntax = "proto3";
    
    message home
    {
        string addr = 1;
    }
    
    message sample_maps
    {
        map<int32, string> ids = 1;
        map<string, home> infos = 2;
    }
    

    读写源文件

    $ cat reader.cpp
    #include <fstream>
    #include <iostream>
    #include "sample_maps.pb.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        fstream input("./log", ios::in | ios::binary);
        cout << "Deserialize start." << endl;
    
        sample_maps m;
        if (!m.ParseFromIstream(&input))
        {
            cout << "Deserialize failed." << endl;
            return -1;
        }
        
        auto ids = m.ids();
        for (auto iter = ids.cbegin(); iter != ids.cend(); iter++)
            cout << iter->first << " : " << iter->second << endl; 
        
        auto infos = m.infos();
        for (auto iter = infos.cbegin(); iter != infos.cend(); iter++)
            cout << iter->first << " : " << iter->second.DebugString(); 
    
        cout << "Deserialize end." << endl;
        input.close();
        return 0;
    }
    
    $ cat writer.cpp
    #include <fstream>
    #include <iostream>
    #include "sample_maps.pb.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        sample_maps m;
        auto ids_ptr = m.mutable_ids();
        (*ids_ptr)[1] = "fwd";
        (*ids_ptr)[2] = "xb";
    
        auto infos_ptr = m.mutable_infos();
        home h;
        h.set_addr("nj");
        (*infos_ptr)["fwd"] = h;
    
        fstream output("./log", ios::out | ios::trunc | ios::binary); 
        cout << "Serialize start." << endl;
        if (!m.SerializeToOstream(&output))
            {
                    cout << "Serialize failed." << endl;
                    return -1;
            }
        output.close();
        cout << "Serialize end." << endl;
        return 0;
    }
    
  • 相关阅读:
    77. Combinations (Recursion)
    90. Subsets II (Back-Track, DP)
    78. Subsets (Back-Track, DP)
    131. Palindrome Partitioning (Back-Track, DP)
    41. First Missing Positive (HashTable)
    49. Group Anagrams (string, HashTable)
    76. Minimum Window Substring (String, Map)
    Leetcode Intersection of Two Linked Lists
    Cocos2d-js 开发记录:基本图形绘制
    Cocos2d-js 开发记录:骨骼动画载入
  • 原文地址:https://www.cnblogs.com/silvermagic/p/9087621.html
Copyright © 2011-2022 走看看