이제 Google protobuf를 사용하고 있으며지도 구조를 사용하고 싶습니다. 그러나 Google 프로토 타입에 구현 된 데이터 구조가 없다는 것을 알았습니다.Google Protobuf를 사용하여지도 구조를 구현하는 방법
내 문제는 매우 간단합니다. 나는 '페이지 번호 (uint32_t)'라는 구조와 매우 간단한 내용을 가지고있다. 내가 원하는 것은이 페이지 번호를 키로 사용하고 내용을 가치로 사용하는 것입니다. 이것은 공간 및 속도 요구 사항을 모두 충족시켜야합니다. 그러나 Protobuf에는 그러한 데이터 구조가 없습니다.
내가 사용하는 방법은 다음과 같이이다 : 페이지의
message MyPageContent {
required uint32 contentA = 1;
required uint32 contentB = 2;
}
message MyTable {
repeated MyPageContent table= 1;
}
총 수는 알려져있다. 그래서 내 프로그램의 시작 부분에 특별한 값 (이 값은 페이지가 없다는 것을 알려주는 데 사용되며 아무도 내용을 사용하지 말아야합니다.)로 테이블에 모든 페이지를 추가합니다. 이렇게하면 페이지 번호를 암묵적으로 사용할 수 있습니다. 색인을 생성합니다. 페이지가 준비되면 테이블의 해당 값을 변경합니다. 사람들은 직접 페이지 번호를 색인으로 사용하여 콘텐츠에 액세스합니다. 이 방법은 많은 공간을 소비합니다. 많은 페이지가 준비되지 않았고 사람들에게 준비되지 않은 것을 알리기 위해 특별한 가치를 부여했습니다. 그러나 액세스 시간은 빠릅니다.
다른 방법은 같은 것을 할 수 있습니다 : 준비가되면 이런 식으로
message MyTable {
repeated uint32 pageNum = 1;
repeated MyPageContent myContent = 2;
}
, 나는 테이블에 페이지를 추가 할 수 있습니다. 이 방법으로 테이블의 크기를 제한해야합니다. 그러나 사람들은 먼저 페이지가 테이블에 있는지 찾기 위해 선형 검색을 수행해야합니다. 이것은 많은 시간을 소비합니다.
기본적으로 이것은 protobuf에서 Map 구조체를 사용하고자하는 이유입니다. 그것은 공간과 시간을 절약합니다.
이 대답은 밖으로 현재 날짜 - [protobuf는지도를 지원합니다] (https://developers.google.com/protocol-buffers/docs/proto#maps) – Krease