将两个重复字段与C++ API 进行比较

Compare two Repeated Fields with the C++ API

本文关键字:C++ API 比较 字段 两个      更新时间:2023-10-16

假设我有两个以下protobuf结构的实例:

message customStruct
{
    optional int32  a = 1;
    optional int32  b = 2;
}
message info
{
    repeated customStruct  cs = 1;
    optional int32         x = 2;
    optional double        y = 3;
}
message root
{
    optional info inf =  1;
}

我知道我可以将消息与C++ API 进行比较,但为了简单起见,我想直接比较两个重复字段(此处customStruct(,也许还可以优化性能。

理想情况下,我需要 C# 方法等于(重复字段其他(的C++等效项。

这在C++可行吗?这是一种好的做法吗?

RepeatedField<T>具有类似STL的迭代器,因此您可以使用std::equal来比较它们:

#include <algorithm>
#include <...>
const google::protobuf::ReapeatedField<int32> & myField1 = ...;
const google::protobuf::ReapeatedField<int32> & myField2 = ...;
bool fieldsEqual = std::equal(myField1.begin(), myField1.end(), myField2.begin());

为了补充@jdehesa的答案:

#include <algorithm>
#include <...>
const google::protobuf::ReapeatedField<int32> & myField1 = ...;
const google::protobuf::ReapeatedField<int32> & myField2 = ...;
bool fieldsEqual = std::equal(myField1.begin(), myField1.end(), myField2.begin(), 
google::protobuf::utils::MessageDifferencer::Equals);