假设我有以下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;
}
I know I can compare Messages with the C++ API但我想直接比较两个重复字段(此处为customStruct
),以简化和优化性能。
理想情况下,我需要一个C ++方法的C#方法Equals(RepeatedField< T > other)。
在C ++中可行吗?这是一个好习惯吗?
答案 0 :(得分:1)
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());
答案 1 :(得分:0)
增加@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);