c++ - 从地图构建跨度
问题描述
我有一张地图,我希望返回一个跨度,如下所示
map<string, map<string, Struct>> map;
span<pair<string, map<string, Struct>>> s {map.begin(), map.end()};
编译失败,抱怨没有从 map::iterator 到 span 模板类型的已知转换。我不确定为什么会失败,因为据我了解迭代器范围构造函数应该分解映射迭代器(成对>)然后“复制”它。我在这里想念什么?
用clang8编译
解决方案
std::span
只能用于内存中连续且一致的元素的集合,但事实std::map
并非如此。
类模板 span 描述了一个对象,该对象可以引用一个连续的对象序列,该序列的第一个元素位于零位置。
一个典型的实现只包含两个成员:一个指向 T 的指针和一个大小。