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

时间:2018-01-11 10:23:42

标签: c++ protocol-buffers

假设我有以下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 ++中可行吗?这是一个好习惯吗?

2 个答案:

答案 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);