Я хочу сериализовать hash_multimap, поддерживает ли его протокальные буферы? Я попытался увеличить serializaitn, но у него есть путаница заголовка файла hash_multimap, поэтому я хочу попробовать буферы протокола google.Могут ли протокольные буферы сериализовать hash_multimap?
ответ
Существует неплохая кодировка с использованием протокольных буферов, и вам нужно запустить свой компилятор protoc для генерации фактического C++ из файлов .proto, но в остальном они великолепны.
Вот пример того, как вы бы сериализация и разобрать зЬй :: hash_multimap
my_hash_multimap.proto
message MyHashMultimap {
message Pair {
required int64 key = 1;
required bytes value = 2;
}
repeated Pair pair = 1;
}
main.cpp
#include <algorithm>
#include <hash_map>
#include <iostream>
#include <string>
#include <utility>
#include "my_hash_multimap.pb.h"
int main() {
std::hash_multimap<int, std::string> hm;
hm.insert(std::make_pair(3, "three"));
hm.insert(std::make_pair(2, "two"));
hm.insert(std::make_pair(1, "one"));
// convert std::hash_multimap to a protobuf MyHashMultimap
MyHashMultimap proto_hm;
std::for_each(hm.begin(),
hm.end(),
[&proto_hm](std::pair<int, std::string> p) {
std::cout << p.first << " " << p.second << std::endl;
// add new Pair to proto_hm
MyHashMultimap::Pair* proto_pair(proto_hm.add_pair());
// set this Pair's values
proto_pair->set_key(p.first);
proto_pair->set_value(p.second);
});
// serialise proto_hm to a std::string
std::string serialised_hm(proto_hm.SerializeAsString());
// parse from this string to a new MyHashMultimap
MyHashMultimap parsed_proto_hm;
if (!parsed_proto_hm.ParseFromString(serialised_hm))
return -1;
std::cout << std::endl << parsed_proto_hm.DebugString() << std::endl << std::endl;
// convert protobuf MyHashMultimap to a std::hash_multimap
std::hash_multimap<int, std::string> parsed_hm;
for (int i(0); i != parsed_proto_hm.pair_size(); ++i) {
// check required fields are populated correctly
if (parsed_proto_hm.pair(i).IsInitialized()) {
// add the Pair to parsed_hm
parsed_hm.insert(std::make_pair(parsed_proto_hm.pair(i).key(),
parsed_proto_hm.pair(i).value()));
}
}
std::for_each(parsed_hm.begin(),
parsed_hm.end(),
[](std::pair<int, std::string> p) {
std::cout << p.first << " " << p.second << std::endl;
});
return 0;
}
Я не думаю, что hash_multimap является частью стандарта. –
Я считаю, что вы правы, но некоторые реализации STL предоставляют hash_multimap в пространстве имен std. – Fraser
- 1. Могут ли протокольные буферы использоваться для реализации стороннего протокола
- 2. Android и протокольные буферы
- 3. Поддерживает ли protobuf (протокольные буферы) пользовательские типы?
- 4. Невозможно скомпилировать протокольные буферы 3.1.0
- 5. Можно использовать протокольные буферы с перекрестным языком
- 6. - это протокольные буферы, подходящие для долгосрочной сериализации?
- 7. протокольные буферы - генерировать NON-inline-аксессоры
- 8. Протокольные буферы не генерируют служебные заглушки
- 9. протокольные буферы + zlib = неразрешенный внешний символ
- 10. Действительно ли протокольные буферы повторно используют указатель строки при разборе?
- 11. Будут ли протокольные буферы Google автоматически выравнивать данные?
- 12. протокольные буферы и фактические параметры транспорта - сокеты или промежуточное ПО
- 13. Почему протокольные буферы намного лучше, чем бинарная сериализация .NET?
- 14. протокольные буферы: нет обозначений для буферов фиксированного размера?
- 15. как отправлять классы, определенные в .proto (протокольные буферы) через сокет
- 16. протокольные буферы с клиентом C++ и C# back-end?
- 17. Могут ли протокольные записи влиять на производительность приложений?
- 18. Будут ли протокольные буферы оптимизированы для использования java nio для файла IO?
- 19. Буферы протокола - RPC
- 20. C++ Google Protocol Буферы: сериализовать в char *?
- 21. Реализация hash_multimap в C++
- 22. Подсчет ключей в hash_multimap
- 23. Буферы протокола с JPA
- 24. Как использовать Python и протокольные буферы Google для десериализации данных, отправленных по TCP
- 25. . Протокольные буферы .Net для класса JSON, JsonFormatReader не обрабатывают крайние фигурные скобки.
- 26. Буферы протокола сериализации/десериализации
- 27. C++ hash_multimap Как получить значения
- 28. Когда я использую протокольные буферы, как я могу узнать ByteSize() на стороне сервера?
- 29. Простые протокольные объявления
- 30. скомпилировать протокольные буферы 3 типа временной метки в C# visual studio?
Я бы рекомендовал вы получите путаницу в заголовке, отсортированную для повышения сериализации :) вместо того, чтобы идти в буфер протокола, если p Эрективность очень важна. – Arunmu