gpt4 book ai didi

c++ - 将 STL 映射存储到 Boost ConstBufferSequence

转载 作者:行者123 更新时间:2023-11-30 03:18:29 32 4
gpt4 key购买 nike

我正在尝试存储 std::map<enum, int>boost::beast::multi_buffer .到目前为止,我一直在使用 boost::asio::buffer_copyboost::asio::buffer存储 vector 和 POD。但是,我找不到存储 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);
  1. 有什么方法可以存储 std::map<enum, int>ConstBufferSequence ? (因为 boost::asio::buffer_copy 需要一个)
  2. 如果不是,是否有任何解决方法来存储 std::map<enum, int>boost::beast::multi_buffer

谢谢!

最佳答案

你可以将你的 map 转换成POD的vector,因为POD选择可以存储enum + int的类型,例如int64_t:

因此创建 vector ,使用一些按位运算扫描 map 创建 vector 项,数据准备就绪:

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

将 vector 解压缩到 map 中应该很容易。

关于c++ - 将 STL 映射存储到 Boost ConstBufferSequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705290/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com