gpt4 book ai didi

c++ - protobuf 映射字段中元素的顺序

转载 作者:行者123 更新时间:2023-12-01 14:48:38 30 4
gpt4 key购买 nike

我在 Protocol Buffer 消息中定义了许多映射字段。这些消息使用 C++ 填充,并在不同的 C++ 组件中接收,该组件使用 DescriptorReflection API 读取消息内容。

给定一个 map 字段,说:

map <int32, int32> my_map = 1;

它的传输方式与以下内容相同:

message my_map_entry {
int32 key = 1;
int32 value = 2;
}
repeated my_map_entry my_map = 1;

由于我已经了解 DescriptorReflection API 的当前限制,因此我必须通过迭代接收到的数据来执行查找。当然,如果我想在接收到的 map 字段中进行多次查找,我可以将所有数据放入一些更合适的数据结构中,例如 std::unordered_map ,但我通常只进行一次查找根据收到的 map 字段向上。

我可以假设一些有关数据接收顺序的信息吗?由于 Protocol Buffer 实现中使用的底层数据结构,重复的 my_map_entry 消息是否可能是有序的?如果是这样,则当找到更大的键时,可以停止在映射中查找整数键。当我在应用程序中处理接收到的 map 字段时,这可以给我带来潜在的优化。

最佳答案

您不能假设序列化后 map 的顺序是相似的。

以下引用摘自 protobuf website :

Wire format ordering and map iteration ordering of map values is undefined, so you cannot rely on your map items being in a particular order

一般来说,protobuf 可能会以随机顺序序列化字段。

关于c++ - protobuf 映射字段中元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60507076/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com