c++ - 如何初始化排序和过滤 Protocol Buffer 中的重复元素?

标签 c++ protocol-buffers

我有这样的消息

message Email {
    string id = 1;
    uint32 reply = 2;
}
message ListEmail {
    repeated Email email = 1;
}

在 C++ 的一个函数中,我想对它进行排序和分页,比如

void sortbyreply (size_t skip, size_t limit, ListEmail* listemail)

我可以遍历列表并复制到一个新列表,但是有没有更聪明的方法来做到这一点?

最佳答案

要对邮件列表进行排序,您可以使用 std::sort

std::sort(
  listemail->mutable_email()->begin(),
  listemail->mutable_email()->end(),
  [](const Email& a, const Email& b) {
      return a.reply() > b.reply();
  }); 

protobuf3中有一个DeleteSubrange可以剪掉重复的字段,不知道是否有效

listemail->mutable_email()->DeleteSubrange(0,skip);
listemail->mutable_email()->DeleteSubrange(limit,listemail->email_size()-limit);

关于c++ - 如何初始化排序和过滤 Protocol Buffer 中的重复元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031679/

相关文章:

c++ - 不同的功能取决于模板类中的类型

c++ - 为什么此代码使用带字符串的映射 (C++) 会出现运行时错误?

c# - 从 C# 调用时 CFB 模式的截断输出

c++ - 从类型为 'char*&' 的临时对象初始化类型为 'char*' 的非常量引用

python - apache-beam 从 GCS 桶的多个文件夹中读取多个文件并加载它 bigquery python

c# - 在 .Net Core 中使用 Protobuf 和 .proto 文件

protocol-buffers - OS X Maverick 上不存在包 com.google.protobuf

c++ - 有没有办法判断我们是否在构造函数中被调用?

go - 无法使用protobuf包

protocol-buffers - 有什么方法可以将 google protobuf 二进制文件(.pb 文件)反编译为 .proto 文件