将 STL 映射存储到 Boost ConstBufferSequence
Store a STL map into a Boost ConstBufferSequence
我正在尝试将 std::map<enum, int>
存储在 boost::beast::multi_buffer
中。到目前为止,我一直在使用 boost::asio::buffer_copy
和 boost::asio::buffer
来存储向量和 PODs。但是,我找不到存储STL贴图的方法。
我试过这个:
auto t_map = std::map<CODES, int>(); // CODES is an enum type
auto t_map_size = t_map.size() * sizeof(std::pair<CODES, int>);
auto tmp_buffer = boost::asio::buffer(t_map, t_map_size); // this is not supported
auto size = boost::asio::buffer_copy(t_map_size , tmp_buffer);
boost::beast::multi_buffer buffer;
buffer.commit(size);
- 有什么方法可以将
std::map<enum, int>
存储在 ConstBufferSequence
中吗? (因为 boost::asio::buffer_copy
需要一个)
- 如果不是,是否有任何解决方法可以将
std::map<enum, int>
存储在 boost::beast::multi_buffer
中?
谢谢!
你可以把你的map转换成POD的vector,因为POD选择可以存储enum + int的类型,例如int64_t
:
因此,创建矢量,扫描您的地图,使用一些按位运算创建矢量项,数据已准备就绪:
auto t_map = std::map<CODES, int>(); // CODES is an enum type
std::vector<int64_t> vec;
for (auto&& elemMap : t_map)
{
int64_t val = elemMap.first; // store key
val <<= 32; // shift key
val |= elemMap.second; // store value
vec.push_back (val);
}
auto tmp_buffer = boost::asio::buffer(vec); // this is supported
将矢量解压缩到地图中应该很容易。
我正在尝试将 std::map<enum, int>
存储在 boost::beast::multi_buffer
中。到目前为止,我一直在使用 boost::asio::buffer_copy
和 boost::asio::buffer
来存储向量和 PODs。但是,我找不到存储STL贴图的方法。
我试过这个:
auto t_map = std::map<CODES, int>(); // CODES is an enum type
auto t_map_size = t_map.size() * sizeof(std::pair<CODES, int>);
auto tmp_buffer = boost::asio::buffer(t_map, t_map_size); // this is not supported
auto size = boost::asio::buffer_copy(t_map_size , tmp_buffer);
boost::beast::multi_buffer buffer;
buffer.commit(size);
- 有什么方法可以将
std::map<enum, int>
存储在ConstBufferSequence
中吗? (因为boost::asio::buffer_copy
需要一个) - 如果不是,是否有任何解决方法可以将
std::map<enum, int>
存储在boost::beast::multi_buffer
中?
谢谢!
你可以把你的map转换成POD的vector,因为POD选择可以存储enum + int的类型,例如int64_t
:
因此,创建矢量,扫描您的地图,使用一些按位运算创建矢量项,数据已准备就绪:
auto t_map = std::map<CODES, int>(); // CODES is an enum type
std::vector<int64_t> vec;
for (auto&& elemMap : t_map)
{
int64_t val = elemMap.first; // store key
val <<= 32; // shift key
val |= elemMap.second; // store value
vec.push_back (val);
}
auto tmp_buffer = boost::asio::buffer(vec); // this is supported
将矢量解压缩到地图中应该很容易。