现在我正在使用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结构。它可以节省空间和时间。