2013-08-15 27 views
8

Protokol arabellek kütüphanesinde yinelenen alan olarak belirtilen dizinin sıralanmasına izin veren bir uygulama var mı? Örneğin dizi, dizi öğelerinin sıralanması gereken bir dizin alanı içeren bir türden öğeler içerdiğini varsayalım. Bunu bulamadım, tahminimce kendim yazmam gerekecek. Sadece onaylamak istedim. Teşekkürler.Öğeleri bir iletinin tekrarlanan alanına yerleştirme Google Protokol Arabellekleri

+2

Bu sadece ... * protobuf'un işi değildir *; Verilerin sıralanmasını istiyorsanız, sıralamanızı * sırala * seri hale getiriciye yaklaşırsınız. Seri hale getiricinin işi, verileri bayt ve tekrar elde etmek, sipariş gibi anlamlarını korumaktır. –

+0

@MarcGravell, aslında uygulama kodumda aynı verinin bir kopyasını yapmak ve sonra protobuf içine boşaltmak zorunda kalmamayı umuyordum, ama sanırım sıralamak zorunda kalacağım. Teşekkürler. – AarCee

cevap

8

Protobufs, std :: sort() şablonuyla sıralanabilen mutable_ * yöntemleriyle bir RepeatedPtr arabirimi sağlar.

Yinelenen alanın temel türü basit değilse, büyük olasılıkla aşırı yüklenen bir operatör <, karşılaştırıcı veya lambda kullanmak isteyeceksiniz. Bir lambda kullanan bir oyuncak örneği:

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(); 
      }); 
İlgili konular