2016-12-08 4 views
1

I C++で関数にソートを初期化し、プロトコルバッファ内の繰り返し要素をフィルタリングする方法は?

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

のようなメッセージを持って、私はこれをソートし、ページ付けしたい、私はリストを反復処理し、新しいものにコピーすることができ

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

のようなもの、これを行うよりスマートな方法がありますか?あなたはSTDを使用することができますlistemailをソートするために

答えて

0

::ソート

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

DeleteSubrangeが繰り返しフィールドをプルーニングすることができますprotobuf3であり、それはその

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

おかげで、しかし効率的である場合には知りません高速でした:) – Alex

+0

これのより効率的なバリエーションは 'begin()'と 'end()'の代わりに 'pointer_begin()'と 'pointer_end()'を使うことです。この方法では、実際のprotobufオブジェクトをコピーする代わりにポインタをコピーするだけです。 –

関連する問題