【发布时间】:2014-11-14 22:22:55
【问题描述】:
现在我正在使用 Google protobuf,我想使用 Map 结构。但是我发现 Google protobuf 中没有实现这样的数据结构。
我的问题很简单。我有一个带有“页码(uint32_t)”和一个非常简单的内容的结构。我想要的是使用这个页码作为键和内容作为值。这应该同时满足空间和速度要求。但是在 Protobuf 中没有这样的数据结构。
我使用的方法是这样的:
message MyPageContent {
required uint32 contentA = 1;
required uint32 contentB = 2;
}
message MyTable {
repeated MyPageContent table= 1;
}
总页数已知。所以在我的程序开始时,我将所有页面内容添加到具有一些特殊值的表中(该值用于通知页面不存在,没有人应该使用内容。)这样,我可以隐式使用页码索引。当一个页面准备好时,我会更改表中的相应值。人们直接使用页码作为索引来访问内容。这种方法占用空间很大(很多页面还没有准备好,我只是放了一些特殊的值让人们知道它还没有准备好。)但是访问时间很快。
另一种方法来做这样的事情:
message MyTable {
repeated uint32 pageNum = 1;
repeated MyPageContent myContent = 2;
}
通过这种方式,我可以在表格准备好时将页面添加到表格中。应该以这种方式限制表的大小。但是,人们必须首先进行线性搜索以查找该页面是否在表格中。这会消耗很多时间。
基本上这就是我想在 protobuf 中使用 Map 结构的原因。既节省空间又节省时间。
【问题讨论】:
标签: c++ map protocol-buffers