2013-08-15 9 views
8

Esiste un'implementazione nella libreria dei buffer di protocollo che consente di ordinare l'array specificato come campo ripetuto? Ad esempio, supponiamo che la matrice sia costituita da elementi di un tipo che a sua volta contiene un campo indice in base al quale gli elementi dell'array devono essere ordinati. Non riuscivo a trovarlo, quindi immagino che dovrò scriverne uno io stesso. Volevo solo confermare. Grazie.Ordinamento degli elementi nel campo ripetuto di un messaggio in Google Protocol Buffers

+2

Questo solo ... * non è il lavoro di protobuf *; se vuoi ordinare i dati, ordinali * prima * ti avvicini al serializzatore. Il lavoro del serializzatore è quello di ottenere i dati in byte e viceversa, preservando la semantica come l'ordine. –

+0

@MarcGravell, in realtà speravo che non avrei dovuto fare una copia degli stessi dati nel mio codice applicazione e quindi scaricarlo nel protobuf, ma per avere informazioni ordinate credo che dovrò farlo. Grazie. – AarCee

risposta

8

I protobuf forniscono un'interfaccia RepeatedPtr, tramite i metodi mutable_ *, che possono essere ordinati con il modello std :: sort().

A meno che il tipo sottostante del campo ripetuto sia semplice, è probabile che si desideri utilizzare un operatore sovraccarico <, comparatore o lambda per farlo. Un esempio di giocattolo usando un lambda sarebbe:

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