У меня есть много полей карты, определенных в моих сообщениях буфера протокола. Сообщения заполняются в C ++ и принимаются в другом компоненте C ++, который считывает их содержимое с помощью API Descriptor
и Reflection
.
Для данного поля карты, скажем:
map <int32, int32> my_map = 1;
Это передается таким же образом, как-то так:
message my_map_entry {
int32 key = 1;
int32 value = 2;
}
repeated my_map_entry my_map = 1;
Поскольку я понял текущее ограничение API Descriptor
и Reflection
, здесь я должен выполнить поиск, перебирая полученные данные. Конечно, я мог бы поместить все данные в более подходящую структуру данных, такую как std::unordered_map
, если бы я хотел сделать много поисков в полученном поле карты, но я обычно только один раз смотрю на полученное поле карты.
Могу ли я предположить что-то о порядке получения данных? Возможно, упорядочены повторяющиеся сообщения my_map_entry из-за используемой структуры данных, используемой в реализации буфера протокола? Если это так, поиск целочисленного ключа на карте может остановиться, когда будет найден больший ключ. Это может дать мне потенциальную оптимизацию, когда дело доходит до обработки полученных полей карты в моем приложении.