我有一条消息像

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

08-16 08:32