2013-08-15 2 views
8

반복 버퍼 필드로 지정된 배열을 정렬 할 수있는 구현이 프로토콜 버퍼 라이브러리에 있습니까? 예를 들어, 배열은 배열 항목을 정렬해야하는 인덱스 필드를 포함하는 유형의 항목으로 구성됩니다. 찾을 수 없으므로 직접 작성해야합니다. 그냥 확인하고 싶었어. 감사합니다. .Google 프로토콜 버퍼의 메시지 반복 필드 항목 정렬

+2

그건 ... * protobuf의 직업이 아닙니다. *; 데이터 정렬을 원한다면 직렬화를하기 전에 * 정렬하십시오. 시리얼 라이저의 임무는 데이터를 바이트로 가져오고 다시 돌아가서 순서와 같은 의미를 보존하는 것입니다. –

+0

@MarcGravell, 실제로 필자는 응용 프로그램 코드에서 동일한 데이터의 복사본을 만든 다음 protobuf로 옮겨 놓을 필요는 없지만 정보를 정렬하려면 필자가해야 할 것으로 생각했습니다. 감사. – AarCee

답변

8

Protobufs는 std :: sort() 템플릿으로 정렬 할 수있는 mutable_ * 메소드를 통해 RepeatedPtr 인터페이스를 제공합니다.

반복 필드의 기본 유형이 단순한 경우가 아니면 오버로드 된 연산자 <, 비교 자 또는 람다를 사용하는 것이 좋습니다. 람다를 사용하는 장난감 예제는 다음과 같습니다.

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(); 
      }); 
관련 문제