13

协议缓冲区库中是否有允许对指定为重复字段的数组进行排序的实现?例如,假设数组由一种类型的项目组成,该类型本身包含一个索引字段,需要根据该索引字段对数组项目进行排序。我没找到,所以我想我得自己写一个。只是想确认一下。谢谢。

4

1 回答 1

21

Protobufs 通过 mutable_* 方法提供了一个 RepeatedPtr 接口,可以使用 std::sort() 模板对其进行排序。

除非重复字段的基础类型是简单类型,否则您可能希望使用重载的 operator<、比较器或 lambda 来执行此操作。使用 lambda 的玩具示例是:

message StaffMember {
    optional string name = 1;
    optional double hourly_rate = 2;
}

message StoreData {
    repeated StaffMember staff = 1;
}

StoreData store;
// Reorder the list of staff by pay scale
std::sort(store->mutable_staff()->begin(),
          store->mutable_staff()->end(),
          [](const StaffMember& a, const StaffMember& b){
             return a.hourly_rate() < b.hourly_rate();
          });
于 2015-01-23T23:39:09.603 回答